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