首页 > 解决方案 > 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

标签: mysqlsqlleft-join

解决方案


您需要在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

推荐阅读