我在使用以下SQL查询时遇到问题
SELECT DISTINCT A.ACC_NO
FROM FIRST_TABLE A
WHERE A.ACC_NO = 1
AND A.ACC_NO NOT IN
(
SELECT DISTINCT ACC_NO
FROM SECOND_TABLE B
LEFT JOIN THIRD_TABLE C
ON B.FIELD_NAME = C.FIELD_NAME
)
ORDER BY A.ACC_NO
以下查询不会返回任何内容,即使我知道内部选择不包含ACC_NO为1的条目。如果我运行以下命令:
SELECT DISTINCT ACC_NO
FROM SECOND_TABLE B
LEFT JOIN THIRD_TABLE C
ON B.FIELD_NAME = C.FIELD_NAME
WHERE ACC_NO = 1
它不返回任何内容。
但是,如果我在(第一个查询的)内部选择中包含“ WHERE ACC_NO <> 1”,则该查询有用。
怎么可能?
答案 0 :(得分:0)
NOT IN
,则 NULL
返回无行。
因此,我强烈建议您始终使用NOT EXISTS
而不是NOT IN
。所以:
SELECT DISTINCT A.ACC_NO
FROM FIRST_TABLE A
WHERE A.ACC_NO = 1 AND
NOT EXISTS (SELECT 1
FROM SECOND_TABLE B LEFT JOIN
THIRD_TABLE C
ON B.FIELD_NAME = C.FIELD_NAME
WHERE ?.ACC_NO = A.ACC_NO
);
?.ACC_NO
是因为我不知道哪个表有ACC_NO
,尽管我可以推测它是B
。
答案 1 :(得分:0)
将NOT IN重写为联接(请查看说明)。使用Null -values连接是“未定义”,意思是:“不好玩”。 尝试在内部SQL中添加“ WHERE ACC_NO IS NOT NULL”。