如何知道 WHERE 语句中有多少条件满足其条件?
Posted
技术标签:
【中文标题】如何知道 WHERE 语句中有多少条件满足其条件?【英文标题】:How to know how many conditions in WHERE statement have met its criteria? 【发布时间】:2021-09-15 23:10:00 【问题描述】:假设我们有以下 SQL 语句。
SELECT ID
FROM table1
WHERE P1 = P1 AND (P2 = X OR P3 = Y OR P4 = Z)
如果括号中的至少两个条件满足其条件,则该语句应返回结果,但我不知道如何编写给出这种结果的语句。提前谢谢你。
【问题讨论】:
您的示例中的P1 = P1
有什么好处,因为它总是会评估为 true
【参考方案1】:
对返回1
或0
的每个条件使用CASE
表达式并添加它们:
SELECT ID
FROM table1
WHERE P1 = P1
AND CASE WHEN P2 = X THEN 1 ELSE 0 END +
CASE WHEN P3 = Y THEN 1 ELSE 0 END +
CASE WHEN P4 = Z THEN 1 ELSE 0 END >= 2
这可以针对更多条件进行扩展。
【讨论】:
【参考方案2】:简单地说,我们可以将您的 WHERE
子句扩展如下:
SELECT ID
FROM table1
WHERE P1 = P1 AND (
P2 = X AND P3 = Y OR
P2 = X AND P4 = Z OR
P3 = Y and P4 = Z);
根据您的数据及其背后的逻辑,可能会进一步简化上述内容。
【讨论】:
虽然你的方法适用于这个讨论用例,但它的泛化能力很差,因为它会导致组合爆炸。例如,“我希望 15 个谓词中有 7 个为真”以上是关于如何知道 WHERE 语句中有多少条件满足其条件?的主要内容,如果未能解决你的问题,请参考以下文章
oracle SQL查询中,如何在where中用条件语句,判断不同情况,追加不同的And条件?