代码之家  ›  专栏  ›  技术社区  ›  Georgi Angelov

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

  •  1
  • Georgi Angelov  · 技术社区  · 10 年前

    所以我尝试使用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 回复  |  直到 10 年前
        1
  •  7
  •   Raphaël Althaus    10 年前

    你不能用IN子句实现这一点(至少不能这样)。

    一种方法是使用or子句

    ((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')
    
        2
  •  3
  •   Bridge user2173966    10 年前

    这是无效语法。你想做什么?看看这四列中的哪一列与每组括号中的值完全匹配?

    如果是,您需要这样指定:

    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'))