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



我有一个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 ),它可能会更快。

相关内容

  • 没有找到相关文章

最新更新