我有一个包含多个列的MySQL数据库(比如column0 .. column19)。
我想选择满足表格条件的数据库的所有行:
column0 < value0 AND column1 < value1 AND ... AND column19 < value19.
问题是,我想选择满足上述任何条件的行。
我知道我可以对15个条件的所有可能组合进行多次查询,但我正在寻找只有1个查询的解决方案。
MySQL有可能吗?是否有其他数据库架构允许此类查询?
由于
答案 0 :(得分:2)
您可以使用以下内容,但不要指望它的表现会特别好!
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
答案 1 :(得分:1)
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
一个),它可能会更快。