我有一个MySQL数据库,里面有很多列(比如column0 .. column19)。
我想选择满足以下形式条件的数据库的所有行:
column0 < value0 AND column1 < value1 AND ... AND column19 < value19.
问题是我想选择满足上述任何 15 个条件的行。
我知道我可以对 15 个条件的所有可能组合进行多个查询,但我正在寻找只有 1 个查询的解决方案。
MySQL可以吗?是否有其他数据库体系结构允许此类查询?
谢谢
您可以使用以下内容,但不要指望它会表现得特别好!
WHERE (CASE WHEN column0 < value0 THEN 1 ELSE 0 END +
CASE WHEN column1 < value1 THEN 1 ELSE 0 END +
... +
CASE WHEN column19 < value19 THEN 1 ELSE 0 END) >= 15
Will的回答也可以写成:
WHERE ( SUM( column0 < value0 )
+ SUM( column1 < value1 )
... +
+ SUM( column19 < value19 )
) >= 15
以上仅适用于 MYSQL,不适用于其他数据库。所以,我想使用标准CASE WHEN
比这个更好。
处理此类查询的另一种方法是这样的(id
是表的主键):
SELECT *
FROM yourTable
JOIN
( SELECT id
FROM yourTable
WHERE column0 < value0
UNION ALL
SELECT id
FROM yourTable
WHERE column1 < value1
UNION ALL
...
UNION ALL
SELECT id
FROM yourTable
WHERE column19 < value19
GROUP BY id
HAVING COUNT(*) >=15
) AS chk
ON chk.id = yourTable.id
如果有 20 个索引(每column0
一个索引,column1
、...、column19
),它可能会更快。