簡體   English   中英

SQL查詢在WHERE CLAUSE中執行更多記錄

[英]SQL Query execute more records in WHERE CLAUSE

我有SQL查詢,其中從VIEW執行數據。 在此查詢中,我有4個參數,所有參數數據都存儲在另一個表中。 3個參數在表中有數據,1個參數沒有記錄。 在3個參數中,共有“ 1080”條記錄,但是此查詢執行“ 16000”條記錄。

我的SQL查詢:

SELECT DISTINCT COL1, COL2, COL3, COL4

FROM TABLE

WHERE (COL1 IN (SELECT VAL FROM RPPARAMLIST where flg = 'I') OR COL1 = COL1)
AND (COL2 IN (SELECT TO_NUMBER(VAL) FROM RPPARAMLIST where flg = 'P') OR COL2 = COL2)
AND (COL3 IN (SELECT TO_NUMBER(VAL) FROM RPPARAMLIST where flg = 'C') OR COL3 = COL3)
AND (COL4 IN (SELECT TO_NUMBER(VAL) FROM RPPARAMLIST where flg = 'U') OR COL4 = COL4);

當我在WHERE條款中刪除OR條件時,請顯示空記錄。

樣本數據:

1080條記錄

在此處輸入圖片說明

輸出數據:

13619條記錄

在此處輸入圖片說明

這些是“重言式”:所有“和”都短路了。 您可以刪除所有whereand子句,結果將相同:

SELECT DISTINCT COL1, COL2, COL3, COL4
FROM TABLE

將獲得與您當前狀態相同的結果:

SELECT DISTINCT COL1, COL2, COL3, COL4
FROM TABLE
WHERE (<condition> OR TRUE) -- =TRUE
AND (<condition> OR TRUE)   -- =TRUE
AND (<condition> OR TRUE)   -- =TRUE
AND (<condition> OR TRUE)   -- =TRUE

在查詢中放置“ OR COL1 = COL1”將始終為true。 我相信您想這樣做:

SELECT DISTINCT COL1, COL2, COL3, COL4
FROM TABLE
WHERE COL1 IN (SELECT VAL FROM RPPARAMLIST where flg = 'I')
AND COL2 IN (SELECT TO_NUMBER(VAL) FROM RPPARAMLIST where flg = 'P') 
AND COL3 IN (SELECT TO_NUMBER(VAL) FROM RPPARAMLIST where flg = 'C') 
AND COL4 IN (SELECT TO_NUMBER(VAL) FROM RPPARAMLIST where flg = 'U');

我認為這是您想要的查詢:

SELECT DISTINCT t.col1, t.col2, t.col3, t.col4
FROM table_name t
WHERE EXISTS
        (
            SELECT 1 
            FROM rpparamlist 
            WHERE flg = 'I' AND t.col1 = val 
        )
    OR EXISTS
        (
            SELECT 1 
            FROM rpparamlist 
            WHERE flg = 'P' AND t.col2 = TO_NUMBER(val) 
        )
    OR EXISTS
        (
            SELECT 1 
            FROM rpparamlist 
            WHERE flg = 'C' AND t.col3 = TO_NUMBER(val) 
        )
    OR EXISTS
        (
            SELECT 1 
            FROM rpparamlist 
            WHERE flg = 'U' AND t.col4 = TO_NUMBER(val) 
        );

該查詢將使用rpparamlist檢查所有4個條件,然后rpparamlist這4個結果以獲取最后的結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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