【问题标题】:WHERE-IN statement: error while executing SQL query on database: row value misusedWHERE-IN 语句:在数据库上执行 SQL 查询时出错:行值被滥用
【发布时间】: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


    【解决方案1】:

    来自Row Value Comparisons

    对于行值 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 2017-06-26
      • 1970-01-01
      • 2018-07-24
      • 1970-01-01
      相关资源
      最近更新 更多