SQL查询在WHERE CLAUSE中执行更多记录

时间:2019-01-23 08:52:20

标签: sql oracle oracle10g

我有SQL Query,可在其中执行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条记录

enter image description here

输出数据:

13619条记录

enter image description here

3 个答案:

答案 0 :(得分:0)

这些是“重言式”:所有“和”都短路了。您可以删除所有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

答案 1 :(得分:0)

在查询中放置“ 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');

答案 2 :(得分:0)

我认为这是您想要的查询:

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个条件,然后合并这4个结果以获取最后的结果

相关问题