表格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
                 );

07-25 21:51