2011-04-21 42 views
1

需要Oracle查询帮助查询到的输出值中不存在在表

要求:

我有5个表中的行可以说,ID = 1,2,3,4,5

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

例:
1.如果用户通过9然后如果用户通过1,2,10然后Oracle查询应返回的输出作为10

为9 Oracle查询应返回的输出作为9
2.上面的例子中有10个不在表中。

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

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

在8,9,10的情况下怎么办? – V4Vendetta 2011-04-22 03:04:19

+0

@ V4Vedanta - 这些r只是示例中使用的虚拟值...没有其他......我的需求是检查传递的值是否可用n表...如果不是,则显示该值。 – Amit 2011-04-22 04:19:11

+0

用户如何通过“1,2,10”?作为一个字符串或数组的值或作为另一个表的内容?请详细说明。 – 2011-04-22 08:29:25

回答

0
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 
0

你可以使用一个嵌套表作为输入:

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