表格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列中不为空的代码
我在想这样的事情:
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
);