所以我尝试使用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'
我不确定这里的错误是什么。我想知道是否有人尝试过类似的东西。这似乎是一个简单的查询。谢谢。
答案 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'))