如何知道 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】:

对返回10 的每个条件使用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 语句中有多少条件满足其条件?的主要内容,如果未能解决你的问题,请参考以下文章

sql语句中where条件的嵌套子查询性能

oracle SQL查询中,如何在where中用条件语句,判断不同情况,追加不同的And条件?

sql同时满足两个条件的语法怎样写?要用where语句

SQL语句where多条件查询怎么写

SQL 语句 join where 如果一个条件不满足,则执行另一个条件

Java 8:带有 where 条件的 Lambda 表达式