我试图找出简单查询返回null的原因:
SELECT CardNo FROM BOOK_LOANS WHERE DueDate=DateReturned AND
NOT EXISTS
(SELECT CardNo FROM BOOK_LOANS WHERE DueDate<>DateReturned)
我一直在了解WHERE NOT EXISTS
,但似乎无法找到同时使用WHERE
和NOT EXISTS
的任何示例。这有更好的方法吗?
当我改为使用NOT IN
但我必须在此查询中使用NOT EXISTS
时,我的查询才有效
答案 0 :(得分:0)
使用NOT EXISTS
子句时,必须将子查询与主查询链接。
一个例子:
SELECT *
FROM persons p
WHERE NOT EXISTS(SELECT 'OTHER'
FROM persons p2
WHERE p.id <> p2.id AND p.city_id = p2.city_id)
在此查询中,我想提取同一城市中不存在另一个人的所有人。所以我将子查询表(人员p2)与主查询表(人员p)
联系起来在您的示例中,当然存在两个DueDate<>DateReturned
的记录,因此您的查询始终返回NULL
答案 1 :(得分:0)
尝试以下查询:
SELECT CardNo FROM BOOK_LOANS A WHERE A.DueDate=A.DateReturned AND
NOT EXISTS
(SELECT CardNo FROM BOOK_LOANS B WHERE B.CardNo = A.CardNo B.DueDate<>B.DateReturned)
基本上,您需要在CardNo
上使用内部查询加入外部查询,否则NOT EXISTS
将返回日期不匹配的任何记录。