繁体   English   中英

在LEFT JOIN上获取正确的表格数据

[英]Get right table data on LEFT JOIN

我的sql连接请求有问题。 我需要获取左表中未在ME(用户1)的右表中引用的行或状态等于0且用户等于1的右表中引用的行。我还需要右表的字段状态。

这是我的两个桌子:

Table left
ID | title
1  | Title 1
2  | Title 2
3  | Title 3
4  | Title 4
5  | Title 5
6  | Title 6

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
7  |    0   |   50 |    4
8  |    1   |   50 |    5

我的目标是获得以下结果:

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
   6    |  Title 6   |     NULL     |    NULL

这是我目前的要求:

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)

有了这个请求,我得到的行ID(左表)为1/3 /6。但是我也需要ID为4 /5。这些行不会显示,因为另一个用户(50)作为参考,但不是我(1) 。

如果有人可以帮助我在结果中添加第4/5行,我会很高兴。

谢谢

对查询的小的改进就足够了:

SELECT l.id, l.title, r.user, r.status
FROM left as l
LEFT JOIN right as r ON l.id = r.left_id and r.user = 1
WHERE r.left_id IS NULL or r.status = 0
(Select t1.id, t1.title,t2.status,t2.user
from tableLeft t1
right outer join tableRight t2 on t2.left_id=t1.id
where t1.id not in
   (select tt2.left_id from tableRight tt2)
)

union

(select t1.id,t1.title,t2.status,t2.user
from tableLeft t1
left join tableRight t2 on t1.id=t2.left_id
where t2.status=0 and t2.user=1

)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM