mysql - SQL LEFT JOIN 从第二个表中排除两条记录
问题描述
我正在尝试左连接,并且如果状态 = 是,我还想从第二个表中排除记录。但是当我使用左连接时,它给出了 table1 中的所有记录,而不排除 table2 中状态为“是”的记录。
Table1
--------------------------------
id date
--------------------------------
1 01/09/2020
2 02/09/2020
3 03/09/2020
4 04/09/2020
5 05/09/2020
Table2
--------------------------------
id date status
--------------------------------
1 01/09/2020 Yes
2 02/09/2020 Yes
3 03/09/2020
期望的结果
--------------------------------
id date
--------------------------------
3 03/09/2020
4 04/09/2020
5 05/09/2020
排除 id 1,2 因为 table2 的 status="yes"。
我知道我的 SQL 语法是错误的。请告知正确的语法:
SELECT table1.id,table1.date
FROM table1
LEFT JOIN (select table2.id, table2.date from table2 where status!='Yes') as table2
ON table1.id=table2.id and table1.date = table2.date
解决方案
您需要在WHERE
子句中设置正确的条件:
SELECT t1.*
FROM Table1 t1 LEFT JOIN Table2 t2
ON t2.id = t1.id AND t2.date = t1.date
WHERE COALESCE(t2.status, '') <> 'Yes'
或者:
SELECT t1.*
FROM Table1 t1 LEFT JOIN Table2 t2
ON t2.id = t1.id AND t2.date = t1.date
WHERE t2.status IS NULL OR t2.status <> 'Yes'
请参阅演示。
结果:
> id | date
> -: | :---------
> 3 | 03/09/2020
> 4 | 04/09/2020
> 5 | 05/09/2020
推荐阅读
- sql - 使用 CharIndex 函数在列的子字符串上选择 Distinct
- c# - 实体框架核心 2.1 将 AsNoTracking 与多个异步一起使用会给出 InvalidOperationException:连接未关闭
- c++ - 使用 glDrawArraysInstanced 渲染 OpenGL tilemap 的问题
- javascript - 在这种情况下我需要 redux-promise 吗?
- api - 我们如何让依赖慢的 API 更快?
- javascript - 将值分配给另一个具有动态分配键的对象内的对象
- java - 春季启动 + REST + HATEOAS + HAL
- kotlin - 防止 String.Contains 匹配空
- ms-access - 防止 MS Access 查询中的 MS Word 邮件合并锁定文件
- asynchronous - Jersey 异步客户端处理程序在服务器重新启动后永远不会超时