使用条件列表的任何子集查询数据库

时间:2011-05-13 23:17:10

标签: mysql sql database

我有一个包含多个列的MySQL数据库(比如column0 .. column19)。

我想选择满足表格条件的数据库的所有行:

column0 < value0 AND column1 < value1 AND ... AND column19 < value19.

问题是,我想选择满足上述任何条件的行。

我知道我可以对15个条件的所有可能组合进行多次查询,但我正在寻找只有1个查询的解决方案。

MySQL有可能吗?是否有其他数据库架构允许此类查询?

由于

2 个答案:

答案 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个索引(每个column0column1,...,column19一个),它可能会更快。