我的sql join请求有问题,我需要获取左表的行,这些行未在右表中引用或在右表中引用,状态等于0表示我的用户1。 我还需要右表的字段状态 这是我的两张桌子:
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的行,我不知道如何删除这一行。 如果有人可以帮助我。
由于
答案 0 :(得分:1)
这个怎么样?
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)
将保留具有请求值的左侧记录。
答案 1 :(得分:1)
由于您使用LEFT JOIN,因此无法使用连接条件来过滤状态。而是在WHERE子句中过滤。
SELECT l.title, r.status
FROM left as l
LEFT JOIN right as r ON l.id = r.left_id
WHERE r.ID IS NULL OR (r.status = 0 and r.user = 1)
答案 2 :(得分:0)
试试这样。首先使用ID加入,然后在关闭的位置过滤您的条件
SELECT l.title, r.status
FROM left as l
LEFT JOIN right as r ON l.id = r.left_id
Where r.user = 1 AND r.status = 0