sql - 左连接和右表中的数据

标签 sql postgresql left-join

我的 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/

相关文章:

sql - Redshift 左外连接忽略空值

php - 空格中断 MySQL 字符串搜索

sql - 是什么使这些查询之一更快?

java - Liferay 的带日期输入的自定义查询

sql - 使用Rails Console SQL查询字符串学习SQL

java - 通过 JDBC 连接时在 session 信息中显示应用程序名称

mysql - SQL 语句左连接,其中children 为null 或

c# - 如何使用 linq 扩展方法执行左外连接

postgresql - 在 PostgreSQL 中使用 LIKE '%a%' 同时针对 SQL 注入(inject)清理数据

PostgreSQL:在where子句中使用函数参数