2011-05-13 26 views
0

我有一个MySQL数据库,有很多列(比如说column0 .. column19)。使用条件列表的任何子集查询数据库

我想选择满足以下形式的条件的数据库中的所有行:

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

美中不足的是,我想选择其中满足任何条件15脱离上述的行。

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

MySQL有可能吗?是否有另一个数据库架构允许这样的查询?

感谢

+1

@AmirW:你是说如果满足条件中的至少15个条件,你想选择一行? – 2011-05-13 23:23:08

+0

@Rob考伊,是 – AmirW 2011-05-13 23:24:38

+0

你可以在陈述中做或不做过滤,并过滤掉没有至少15个之后的? – Tbone 2011-05-13 23:29:50

回答

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 
+0

正是我所需要的。谢谢! – AmirW 2011-05-13 23:39:30

+0

我的荣幸 - 请记住,这不是一个特别好的查询。这就是说,我不确定有一个很好的方法来做到这一点 - 也许这甚至是最佳的... :) – 2011-05-13 23:40:42

1

威尔的回答也可以写为:

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

相关问题