SQL 内连接合并为一行
SQL inner join combine to one row
通过这个 SQL 查询,我得到了每个元值的结果,所以在这种情况下一次有 2 个结果。应该发生的是每个 meta_key 都有自己的列(user_phone
和 full_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)
了解不够
通过这个 SQL 查询,我得到了每个元值的结果,所以在这种情况下一次有 2 个结果。应该发生的是每个 meta_key 都有自己的列(user_phone
和 full_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)
了解不够