【问题标题】:Multiple values IN多个值 IN
【发布时间】:2011-09-27 15:27:13
【问题描述】:

通常 IN 与一个值一起使用:

SELECT * FROM data WHERE f1 IN (<subquery>)

它可以与多个值一起使用:

SELECT * FROM data WHERE f1 IN (<subquery>) OR f2 IN (<subquery>);

但是我可以删除重复项吗,例如:

SELECT * FROM data WHERE ANY(f1, f1) IN (<subquery>)

我尝试使用 CTE,但它也需要子查询。

【问题讨论】:

    标签: sql postgresql in-subquery


    【解决方案1】:

    假设您有 col1col2col3 列,并且您在子查询中查找 col1col2(为了便于说明),您可以执行以下操作:

    select col1,col2,col3
    from table
    where (col1,col2) in (<subquery>)
    group by 1,2,3;
    

    只要&lt;subquery&gt;select col1,col2 from &lt;blah&gt; 的(粗略)形式,那么您最终将得到不同的(col1,col2,col3) 三元组,其中(col1,col2) 对出现在&lt;subquery&gt; 中。

    【讨论】:

      【解决方案2】:

      我可以用集合运算符来写这个:

      SELECT *
      FROM data
      WHERE EXISTS (
          VALUES(f1, f2)
      
          INTERSECT
      
          SELECT(<subquery>)
      )
      

      【讨论】:

        【解决方案3】:

        虽然这两种解决方案都有效,但我发现最快(不幸的是不是最短)的方法是使用 CTE:

        WITH x AS (<subquery>)
        SELECT * FROM data WHERE f1 IN (SELECT * FROM x) OR f2 (SELECT * FROM x)
        

        【讨论】:

          猜你喜欢
          • 2019-06-13
          • 1970-01-01
          • 1970-01-01
          • 2013-09-11
          • 2021-09-26
          • 2014-08-04
          • 1970-01-01
          • 2019-10-26
          • 1970-01-01
          相关资源
          最近更新 更多