有一个问题浮出水面。它是用基本 SQL 术语设置的,但其本质是纯数学(所以也许我也应该访问 https://mathoverflow.net)。
我在某个理论数据库中有一个表,有 6 个字段,全部都是数字。我们还有基本条件,例如 Field_1 > Field_5、Field_4 = 3 等,总共 7 个条件。我需要编写一个选择,它至少满足其中4个。
用许多逻辑条件编写长选择,例如(cond_1 AND cond_2 AND cond_3 and cond_4) OR (...)不是一种方法,因为7个元素的4组合等于140 ,不想写那么多条件。
那么如何以简化形式编写选择呢?
最佳答案
一种方法是为该行满足的每个条件计数 1,并将总和与目标值进行比较:
SELECT *
FROM yourtable
WHERE (
(CASE WHEN condition1 THEN 1 ELSE 0 END) +
(CASE WHEN condition2 THEN 1 ELSE 0 END) +
...
(CASE WHEN condition7 THEN 1 ELSE 0 END)
) >= 4
请注意,这需要评估每一行的所有条件,这样您就不会得到短路效果,但它很简单,也许它对您来说具有足够好的性能。
如果您使用 MySQL,您可以用更简单的方式编写此代码,因为 bool 结果相当于 0 或 1,因此您不需要 CASE 语句:
WHERE (condition1) + (condition2) + ... + (condition7) >= 4
关于sql - 从可用的 M 个条件中选择至少满足 N 个条件的一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3006957/