2014-07-10 43 views
1

所以我想使用WHERE IN子句,我使用多列而不是單列。SQL - 使用WHERE IN子句選擇多個列

這是我試過,但我不斷收到錯誤:

"error near "," ... " 

聲明:

SELECT 
    * 
FROM 
    language 
WHERE 
    (char1 , char2, char3, char4) in (('H' , 'H', 'B', 'B') , ('B' , 'B', 'B', 'M')) 
     AND language.type = 'M' 

我不知道這裏的錯誤是。我想知道是否有人嘗試過類似的東西。這似乎是一個微不足道的查詢。謝謝。

回答

7

你不能做到這一點與IN子句(至少不是這樣)。

一種方法是使用或條款

((char1 = 'H' and char2 = 'H' and char3 = 'B' and char4 = 'B') or 
(char1 = 'B' and char2 = 'B' and char3 = 'B' and char4 = 'M')) 

and language.type = 'M' 

,如果你真的想使用IN子句,你可以使用串聯

這樣的事情(這將與此示例纔有效,所以你可能需要通過在字段和搜索值之間添加分隔符來進行修改)

where 
concat(char1, char2, char3, char4) IN ('HHBB', 'BBBM') 
+0

這是完美的。謝謝。僅供參考,對於SQLite,concat不起作用,因此使用(char1 || char2 || char3 || char4)可以實現相同的功能。 –

3

這是無效的語法。你想做什麼?看看所有這四個列在哪裏與每組括號中的值完全匹配?

如果是這樣,你需要指定這樣的:

WHERE language.type = 'M' AND 
((char1 = 'H' AND char2 = 'H' AND char3 = 'B' AND char4 = 'B') OR 
(char1 = 'B' AND char2 = 'B' AND char3 = 'B' AND char4 = 'M'))