多列组合值查询用IN报错、用=正常?求正确SQL语法
多列多值匹配的正确SQL语法
你遇到的错误是因为部分数据库(比如DB2,从错误码SQL0104判断大概率是该数据库)不支持行构造器直接用于IN子句的语法,以下是两种可行的替代方案:
方案一:用OR连接多组条件(兼容性最强)
直接把每组列值匹配的条件用OR拼接,几乎所有数据库都支持这种写法:SELECT * FROM myTable WHERE (col1 = value1 AND col2 = value2 AND col3 = value3) OR (col1 = value5 AND col2 = value6 AND col3 = value7);方案二:通过VALUES子句+JOIN实现(适合多组匹配场景)
如果你使用的数据库支持VALUES子句(比如DB2 11.1及以上版本、PostgreSQL等),可以用这种更简洁的写法:SELECT t.* FROM myTable t JOIN ( VALUES (value1, value2, value3), (value5, value6, value7) ) AS vals(c1, c2, c3) ON t.col1 = vals.c1 AND t.col2 = vals.c2 AND t.col3 = vals.c3;
注意:如果匹配的是字符串类型的值,需要给值加上单引号,例如'value1',避免语法错误。
内容的提问来源于stack exchange,提问作者Claudette
相关产品推荐
相关产品推荐

