查询输出表中不存在的值

Posted

技术标签:

【中文标题】查询输出表中不存在的值【英文标题】:Query to output values which are not present in table 【发布时间】:2011-04-21 23:29:41 【问题描述】:

在 Oracle 查询方面需要帮助

要求:

我在一个表中有 5 行假设 ID = 1、2、3、4、5

要求用户可以将任何值作为输入传递,如果该值在表中不存在,则查询应返回不存在的值。

例如: 1. 如果用户通过 9,则 Oracle 查询应返回输出为 9 2. 如果用户通过 1,2,10 那么 Oracle 查询应该返回输出为 10

因为上例中的 9 和 10 不在表格中。

我正在使用以下查询,但没有得到结果。

SELECT ID
FROM TABLE_NAME WHERE ID NOT IN
(SELECT ID 
FROM TABLE_NAME where ID NOT in (1,2,10))

【问题讨论】:

@V4Vedanta - 这些只是示例中使用的虚拟值......没有别的......我的要求是检查传递的值是否在表中可用......如果没有那么显示该值。 用户如何传递“1,2,10”?作为字符串或作为值数组或作为另一个表的内容?请详细说明。 【参考方案1】:
create table z (id number);
Table created.

SQL> insert into z values (1);
1 row created.
SQL> insert into z values (2);
1 row created.
SQL> insert into z values (3);
1 row created.
SQL> insert into z values (4);
1 row created.
SQL> insert into z values (5);
1 row created.

SQL> select 10 id from dual
  2  minus
  3  select id from z;

    ID
----------
    10

【讨论】:

【参考方案2】:

您可以使用嵌套表作为输入:

SQL> CREATE TABLE table_name (ID NUMBER NOT NULL); 

Table created

SQL> INSERT INTO table_name (SELECT ROWNUM FROM dual CONNECT BY LEVEL <= 5); 

5 rows inserted

SQL> CREATE TYPE tab_number AS TABLE OF NUMBER;
  2  / 

Type created

SQL> SELECT *
  2    FROM TABLE(tab_number(1,2,10)) x
  3   WHERE x.column_value NOT IN (SELECT ID FROM table_name);

COLUMN_VALUE
------------
          10

【讨论】:

以上是关于查询输出表中不存在的值的主要内容,如果未能解决你的问题,请参考以下文章

如何获取其他表中不存在的值[重复]

一个表中的输出行在另一个表中不存在匹配项

添加查询中不存在的列

选择另一个表中不存在的值

如果值不存在,则插入连接表

SQLite查询选择另一个表中不存在的所有记录