SQL - 使用WHERE IN子句选择多个列

时间:2014-07-10 16:38:08

标签: mysql sql sql-server

所以我尝试使用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'

我不确定这里的错误是什么。我想知道是否有人尝试过类似的东西。这似乎是一个简单的查询。谢谢。

2 个答案:

答案 0 :(得分: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')

答案 1 :(得分: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'))