SQL 查询在 WHERE CLAUSE 中执行更多记录
Posted
技术标签:
【中文标题】SQL 查询在 WHERE CLAUSE 中执行更多记录【英文标题】:SQL Query execute more records in WHERE CLAUSE 【发布时间】:2019-01-23 08:52:20 【问题描述】:我有从 VIEW 执行数据的 SQL 查询。在这个查询中,我有 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 CLAUSE 中的 OR 条件时,则显示空记录。
样本数据:
1080 条记录
输出数据:
13619 条记录
【问题讨论】:
分享样本数据及其预期输出 使用OR COL1 = COL1
时会得到所有数据,排除所有COL1为null
【参考方案1】:
那些是“重言式”:所有的“和”都是短路的。您可以删除所有 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
【讨论】:
第四列没有记录 @AmmadWasim 请编辑您的问题,添加示例数据和所需的输出 @AmmadWasim 没有专栏的标题,照原样,说明什么【参考方案2】:在您的查询中放置“OR COL1 = COL1”将始终为真。我相信你想这样做:
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');
【讨论】:
这个查询显示空记录,因为 COL4 没有记录 您能否给出每列的准确数据或样本数据以及所需的输出数据?【参考方案3】:我认为这是您想要的查询:
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 个结果合并得到最后一个结果
【讨论】:
以上是关于SQL 查询在 WHERE CLAUSE 中执行更多记录的主要内容,如果未能解决你的问题,请参考以下文章
在 WHERE-Clause for INSERT 中重用子查询结果
如何在 SQL 的 WHERE CLAUSE 中的 CASE 内添加 sql“BETWEEN”条件
MySQLjava.sql.SQLException:Unknown column ‘****‘ in ‘where clause‘错误问题原因以及如何解决?
MySQLjava.sql.SQLException:Unknown column ‘****‘ in ‘where clause‘错误问题原因以及如何解决?