尝试将EAV表转换为常规视图时出现“未知列”错误

时间:2019-12-03 09:30:07

标签: mysql entity-attribute-value

我的MySQL “数据” EAV表具有如下遗传结构:

rowId  |  key |  value
  1       name    John
  1       lname   Lennon
  2       name    Paul
 ....

我喜欢做一个select,它将在表中显示数据,就好像keys是列名一样:

rowId  | name |  lname
  1      John     Lennon
  2      Paul
  ....

按照this one之类的链接,我创建了此查询:

SELECT st.rowId, st.key, st.value,
  (CASE WHEN data.key = "name" THEN data.value END) AS `name`, 
  (CASE WHEN data.key = "lname" THEN data.value END) AS `lname`
FROM data st 
GROUP BY st.rowId;

但是出现以下错误:

  

“字段列表”中的未知列“ data.key”

我试图按照建议的here来更改"的符号,但没有成功。

1 个答案:

答案 0 :(得分:1)

许多错误1)您为st加上了别名数据,因此您应该为所有列引用st(您不能混合和匹配)2)您在select中有没有意义的列3)您需要一个max函数

SELECT st.rowId ,#, st.key, st.value,
  max(CASE WHEN st.key = "name" THEN st.value END) AS `name`, 
  max(CASE WHEN st.key =  'lname' THEN st.value END) AS `lname`
FROM  data st
GROUP BY st.rowId;

+-------+------+--------+
| rowId | name | lname  |
+-------+------+--------+
|     1 | John | Lennon |
|     2 | Paul | NULL   |
+-------+------+--------+
2 rows in set (0.00 sec)