簡體   English   中英

Teradata SQL查詢問題

[英]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”,則該查詢確實起作用。

怎么會這樣?

如果子查詢中的任何值為NULLNOT 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM