我的 sql 连接请求有问题,我需要获取左表中未在右表中引用的行,或者在右表中引用的行,其状态等于我的用户 1 的 0。 我还需要右表的字段状态 这是我的两张 table :
Table left
ID | title
1 | Title 1
2 | Title 2
3 | Title 3
4 | Title 4
5 | Title 5
Table right
ID | status | user | left_id
1 | 0 | 1 | 1
2 | 0 | 50 | 1
3 | 1 | 1 | 2
4 | 0 | 50 | 2
5 | 0 | 1 | 3
6 | 1 | 50 | 3
我的目标是得到这个结果:
left.ID | left.title | right.status | right.user
1 | Title 1 | 0 | 1
3 | Title 3 | 0 | 1
4 | Title 4 | NULL | NULL
5 | Title 5 | NULL | NULL
我需要正确的信息来对状态字段是否存在进行一些验证。
这是我目前的请求:
SELECT l.title, r.status
FROM left as l
LEFT JOIN right as r ON l.id = r.left_id AND r.user = 1 AND r.status = 0
问题是我得到了标题 2 行,我不知道如何删除该行。 如果有人可以帮助我。
谢谢
最佳答案
这个怎么样
SELECT l.id, l.title, r.user, r.status
FROM left as l
LEFT JOIN right as r ON l.id = r.left_id
WHERE r.left_id IS NULL or (r.user = 1 AND r.status = 0)
r.left_id IS NULL
将保留不在右表中的左记录,or (r.user = 1 AND r.status = 0)
将保留带有请求值的左侧记录。
关于sql - 左连接和右表中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49667205/