2011-05-13 61 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),它可能會更快。

相關問題