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

时间:2018-04-10 07:48:56

标签: sql postgresql left-join

我的sql join请求有问题。 我需要在右表中为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行添加到我的结果中,我会很高兴。

由于

2 个答案:

答案 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 and r.user = 1
WHERE r.left_id IS NULL or r.status = 0

答案 1 :(得分: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

)