我有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条记录
输出数据:
13619条记录
答案 0 :(得分:0)
这些是“重言式”:所有“和”都短路了。您可以删除所有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
答案 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个结果以获取最后的结果