MySQL连接表在自身水平上
我一直想弄清楚这一点,我知道这与连接有关,但似乎无法弄清楚 当我运行以下查询时:MySQL连接表在自身水平上,mysql,wordpress,join,pivot-table,Mysql,Wordpress,Join,Pivot Table,我一直想弄清楚这一点,我知道这与连接有关,但似乎无法弄清楚 当我运行以下查询时: SELECT user_id, meta_key, meta_value FROM usermeta WHERE usermeta.meta_key = 'my_key' OR usermeta.meta_key = 'first_name' OR usermeta.meta_key = 'last_name' 我得到的数据当然是: user_id meta_key meta_value 1
SELECT user_id, meta_key, meta_value
FROM usermeta
WHERE usermeta.meta_key = 'my_key'
OR usermeta.meta_key = 'first_name'
OR usermeta.meta_key = 'last_name'
我得到的数据当然是:
user_id meta_key meta_value
1 first_name John
2 first_name Jane
3 first_name Tom
1 last_name Doe
2 last_name Cobb
3 last_name Smith
1 my_key ABC
2 my_key DEF
3 my_key GHI
我无法找到加入此数据以获取以下信息的正确方法:
user_id first_name last_name my_key
1 John Doe ABC
2 Jane Cobb DEF
3 Tom Smith GHI
如何在MySQL中实现这一点?感谢您的帮助。按id分组并使用条件聚合:
SELECT user_id,
MAX(CASE WHEN meta_key = 'first_name' THEN meta_value END) first_name,
MAX(CASE WHEN meta_key = 'last_name' THEN meta_value END) last_name,
MAX(CASE WHEN meta_key = 'my_key' THEN meta_value END) my_key
FROM usermeta
WHERE meta_key = 'my_key'
OR meta_key = 'first_name'
OR meta_key = 'last_name'
GROUP BY user_id
请参阅。结果: 编辑
您可以将上述查询联接到另一个表:
SELECT g.user_id, g.first_name, g.last_name, g.my_key, t.email
FROM (
<the query here>
) g INNER JOIN othertable t
ON t.id = g.user_id
选择g.user\u id、g.first\u name、g.last\u name、g.my\u key、t.email
从(
)g内部联接表t
在t.id=g.user\u id上
你好,谢谢!这是可行的…但我忘了提到我还有另一个表,其中有这些用户的电子邮件地址。我问题中初始表中的用户id值与另一个表中“id”列的值相同(它们是外键),我如何通过将它们各自的电子邮件地址加入到组的结果中,以使它们准确,并为正确的用户显示正确的电子邮件?不确定是否应该更新该问题,因为您已经回答了该问题,但我忘记了包含该详细信息。请参阅我编辑的答案。如果没有,请参阅
SELECT g.user_id, g.first_name, g.last_name, g.my_key, t.email
FROM (
<the query here>
) g INNER JOIN othertable t
ON t.id = g.user_id