mysql - SQL:选择第二个表中不存在的相似行

标签 mysql sql

表1:

+-----------+----------+
|    CODE   |  TYPEID  |
+-----------+----------+
| 441       |  mn014   |
| 223       |  mn014   |
| 224       |  mn014   |
| 655       |  mn089   |
| 854       |  mn089   |
| 449       |  mn032   |
+-----------+----------+

表2:

+-----------+----------+----------+
| CODE      | TAKENDTE | RTURNDTE |
+-----------+----------+----------+
| 441       | 25/08/14 | 01/01/15 |
| 223       | 25/08/14 | 03/01/15 |
| 223       | 25/08/14 | 01/02/15 |
| 223       | 25/08/14 |   NULL   |
| 655       | 25/08/14 | 07/01/15 |
| 854       | 25/08/14 |   NULL   |
| 449       | 25/08/14 | 06/01/15 |
+-----------+---------------------+

我想选择 typeid mn014 的所有代码,这些代码要么不存在于第二个表中,要么在表 2 中存在的所有实例中 RTURNDTE 列中不为 NULL

我在想这样的事情:

SELECT DISTINCT T1.CODE
FROM TABLE1 T1 LEFT JOIN TABLE2 T2

ON T1.CODE=T2.CODE
WHERE TYPEID='mn014' AND (RTURNDTE IS NOT NULL OR T2.CODE IS NULL)

这不起作用,有什么想法吗?

最佳答案

您可以将其表达为 NOT EXISTS - 在 table2 上使用过滤器。您正在查找表 1 中的记录,而表 2 中没有带有 NULL 返回日期的记录(如果我正确理解问题的话)。

select t1.*
from table1 t1
where typeid = 'mn014' and
      not exists (select 1
                  from table2 t2
                  where t2.code = t.code and
                        t2.rturndte is null
                 );

关于mysql - SQL:选择第二个表中不存在的相似行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28325093/

相关文章:

MySQL - 将 View 加入 ITSELF

PHP 选择不工作

php - 我可以让 SQL 查询在每一行上进行两次匹配吗?

sql - 创建触发器以将数据从一个表复制到另一个表

mysql - 两种类型的数据,那么两种类型的数据库?

php - 如果 MYSQL 中存在则更新用户分数

mysql - Prestashop 导入 CSV 错误 - PRIMARY key 条目重复

sql - 根据列值对行进行排名/计数

mysql - 查找数据库中是否存在列(/表)

sql - 如果 id 存在于另一个表中,则有条件地插入到另一个表中,否则插入到 oracle 中的两个表中