【问题标题】:SELECT that returns list of values not present in the tableSELECT 返回表中不存在的值列表
【发布时间】:2019-02-27 19:59:23
【问题描述】:

查询:

select id from users where id in (1,2,3,4,5)

如果 users 表包含 ids 1、2、3,这将返回 1、2 和 3。我想要一个返回 4 和 5 的查询。换句话说,我不希望查询返回任何表中存在的行,我想给它一个数字列表并从该列表中获取未出现在表中的值。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    您必须使用MINUS 运算符。您也可以将其与 odcinumberlist 一起使用,而无需将值存储在临时表中

    SELECT column_value
    FROM table(sys.odcinumberlist(1,2,3,4,5)) 
    MINUS
    SELECT ids
    FROM users;
    

    【讨论】:

      【解决方案2】:

      首先,您需要将数字列表表示为关系(可能不完全是 Oracle 文档使用的术语,但是...)

      VALUES 1,2,3,4,5
      

      然后您可以通过多种方式在查询中使用它

      SELECT *
       FROM (VALUES 1,2,3,4,5) as V(A)
      WHERE A NOT IN ( -- query your table here
                         )
      

      SELECT *
        FROM (VALUES 1,2,3,4,5) as V(A)
           LEFT JOIN -- your table
              ON V.A = table.column
       WHERE table.column is NULL
      

      VALUES 1,2,3,4,5
       MINUS
       -- query your table
      

      我不在一台安装了 ORacle 的计算机上,所以这些中的任何一个可能在语法上有点偏离,但想法就在那里......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-23
        • 2017-03-26
        • 2013-05-22
        • 2015-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多