Dan*_*iev 1 sql database logic discrete-mathematics
有一个问题浮出水面.它是用基本的SQL术语设置的,但它的本质是纯数学(所以也许我也应该访问http://mathoverflow.com).
我在一些理论数据库中有一个表,有6个字段,都是数字.我们还有基本条件,例如Field_1> Field_5,Field_4 = 3等,总共7个条件.我需要编写一个select,它至少满足4个.
写入looooooooooooooooooooooooooong选择具有许多逻辑条件,例如(cond_1 AND cond_2 AND cond_3和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
Run Code Online (Sandbox Code Playgroud)
请注意,这将需要评估每一行的所有条件,这样您就不会产生短路效果,但它很简单,也许它具有足够好的性能.
如果您正在使用MySQL,您可以用更简单的方式编写它,因为布尔结果等于0或1,因此您不需要CASE语句:
WHERE (condition1) + (condition2) + ... + (condition7) >= 4
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
197 次 |
| 最近记录: |