查询输出表中不存在的值
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
【讨论】:
以上是关于查询输出表中不存在的值的主要内容,如果未能解决你的问题,请参考以下文章