[英]Issue with Teradata SQL query
我在使用以下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”,則該查詢確實起作用。
怎么會這樣?
如果子查詢中的任何值為NULL
則NOT IN
返回任何行 。
因此,我強烈建議您始終使用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
NOT IN將重寫為聯接(請檢查說明)。 使用Null -values連接是“未定義”,意思是:“不好玩”。 嘗試在內部SQL中添加“ WHERE ACC_NO IS NOT NULL”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.