我试图从一个查询中的两个相关表中获取数据.
表格如下所示:
表格1:
--------------------------
| ID | username |
--------------------------
| 1 | user1 |
| 2 | user2 |
| 3 | user3 |
| 4 | user4 |
--------------------------
表2:
----------------------------------------------------
| ID | user_id | key | value |
----------------------------------------------------
| 1 | 1 | key1 | value1 |
| 2 | 1 | key2 | value2 |
| 3 | 2 | key2 | value3 |
| 4 | 3 | key3 | value4 |
| 5 | 4 | key1 | value5 |
| 6 | 4 | key3 | value5 |
----------------------------------------------------
我想得到一个结果,包括表1中的所有行和表2中key = key1的键值对.如果表1中的密钥不存在于表1中的给定行,请用NULL填充它.预期结果示例:
----------------------------------------------------
| user_id | username | key | value |
----------------------------------------------------
| 1 | user1 | key1 | value1 |
| 2 | user2 | NULL | NULL |
| 3 | user3 | NULL | NULL |
| 4 | user4 | key1 | value5 |
----------------------------------------------------
或者 – 表1中的所有行都不包含表2中key = key1的键值对.
我尝试了来自2个表的标准SELECT和表1中的SELECT与表2中的JOIN,但我得到的是表1中的所有行,其中包含表2中key = key1的键值对,这与我的相反想.
有什么建议?
解决方法:
select
t1.id,
t1.username,
t2.key,
t2.value
from
table1 t1
left join table2 t2
on t1.id = t2.user_id
and t2.key = 'key1'
要获得所有不具备的“替代”,只需添加一个where子句即可.
where t2.user_id IS NULL
标签:mysql
来源: https://codeday.me/bug/20190726/1540061.html