我的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来更改"
的符号,但没有成功。
答案 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)