存在一个问题。它是用基本的SQL术语设置的,但是它的性质是纯数学的(所以也许我也应该访问https://mathoverflow.net)。
我在一些理论数据库中有一个表格,里面有6个字段,都是数字。我们还有基本条件,例如Field_1> Field_5,Field_4 = 3等,总共7个条件。我需要编写一个满足其中[[至少 4个选择的选择。
写具有很多逻辑条件的长选择,例如(cond_1 AND cond_2 AND cond_3和cond_4)OR(...)是不可行的,因为来自7个元素的4个组合等于140,而一个不包含不想写那么多条件。
那么,如何以简化形式编写选择呢?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,则可以用一种更简单的方式编写此代码,因为布尔结果等于0或1,因此您不需要CASE语句:
WHERE (condition1) + (condition2) + ... + (condition7) >= 4
CASE
WHEN Field1 > Field5 THEN
1
ELSE
0
END
+
CASE
WHEN Field4 = 3 THEN
1
ELSE
0
END
+
etc
AS condition_sum
并根据condition_sum进行过滤>阈值。您甚至可以将大写和表达式的复杂性放入函数中,以使代码可读性更高。
SELECT things
FROM places
WHERE IF(cond_1, 1, 0) + IF(cond_2, 1, 0) + IF(cond_3, 1, 0) + IF(cond_4, 1, 0) + IF(cond_5, 1, 0) >= 4;