【发布时间】:2021-08-03 05:01:12
【问题描述】:
我收到此错误
在数据库 X 上执行 SQL 查询时出错:行值被滥用
对于以下查询模式:
SELECT *
FROM some_table
WHERE (field1, field2) IN (('a', 'b'), ('c', 'd'))
有什么提示吗?
【问题讨论】:
标签: sql sqlite select where-clause
我收到此错误
在数据库 X 上执行 SQL 查询时出错:行值被滥用
对于以下查询模式:
SELECT *
FROM some_table
WHERE (field1, field2) IN (('a', 'b'), ('c', 'd'))
有什么提示吗?
【问题讨论】:
标签: sql sqlite select where-clause
对于行值 IN 运算符,左侧(以下称为“LHS”)可以 可以是带括号的值列表或具有多个的子查询 列。但右侧(以下称为“RHS”)必须是子查询 表达式。
在您的情况下,(('a', 'b'), ('c', 'd')) 不是子查询表达式。
您可以做的是创建一个返回括号中的行值的 CTE,并使用从该 CTE 中进行选择的子查询:
WITH cte(field1, field2) AS (VALUES ('a', 'b'), ('c', 'd'))
SELECT *
FROM some_table
WHERE (field1, field2) IN (SELECT field1, field2 FROM cte)
或者更简单:
WITH cte(field1, field2) AS (VALUES ('a', 'b'), ('c', 'd'))
SELECT *
FROM some_table
WHERE (field1, field2) IN cte
查看简化的demo。
【讨论】: