[英]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條記錄
這些是“重言式”:所有“和”都短路了。 您可以刪除所有where
和and
子句,結果將相同:
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.