SQL 内连接合并为一行

SQL inner join combine to one row

通过这个 SQL 查询,我得到了每个元值的结果,所以在这种情况下一次有 2 个结果。应该发生的是每个 meta_key 都有自己的列(user_phonefull_name),行中有 meta_key

SELECT * 
FROM invoice_users
INNER JOIN invoice_usermeta 
    on invoice_users.id = invoice_usermeta.user_id 
WHERE meta_key='full_name' OR meta_key='user_phone';

我尝试了 GROUP BY 但那是不对的,我无法理解子查询...

invoice_users

的数据库方案
ID | user_login | user_register
--------------------------------
 0    username    [Timestamp]
 1     user2      [Timestamp]
 2     user3      [Timestamp]

invoice_usermeta

的数据库方案
ID | user_id |  meta_key | meta_value
--------------------------------------
 0      0      user_phone   0334234
 1      0      full_name    John Doe
 2      1      user_phone   3453455
 3      1      full_name    Jane Doe
 4      2      user_phone   78678678
 5      3      full_name    John Smith

我得到的结果:

ID  |  user_login | user_registered |  meta_key | meta_value
 0      username      [Timestamp]     full_name    John Doe
 0      username      [Timestamp]     user_phone   0334234
 1      username      [Timestamp]     full_name    Jane Doe
 1      username      [Timestamp]     user_phone   3453455

等..

我想要的

ID  |  user_login | user_registered | user_id |full_name | user_phone
 0      username      [Timestamp]        0      John Doe    0334234
 1      username      [Timestamp]        1      Jane Doe    3453455

等等

您提供的信息有点少,但我会尝试一下。您可能想要执行的操作是执行两次连接,如下所示:

SELECT u.*, m1.meta_value, m2.meta_value
FROM invoice_users u
LEFT OUTER JOIN invoice_usermeta m1
    on u.id = m1.user_id 
    and m1.meta_key='user_phone'
LEFT OUTER JOIN invoice_usermeta m2
    on u.id = m2.user_id 
    and m2.meta_key='full_name'

如果这还不够,因为你有很多元值,你会想调查 MySQL 等同于 Sql 服务器 PIVOT(很可能是 PIVOT,我只是不对 MySQL)

了解不够