你怎么知道IN子句中包含哪些未找到的项目?

时间:2013-10-16 14:09:16

标签: sql oracle select subquery in-clause

我的IN子句中有10个项目的列表,在我的SELECT中只找到了8个项目。 你怎么知道IN子句中包含哪些项目?

SELECT * FROM SOME_TABLE WHERE ID IN (1,2,3,4,5,6,7,8,9,10)

我的表是:

**ID   NAME** 
------------------
1    JOAO 
2 JOSE
3 WILLIAM
4 MARIA
5 CARLOS
6 BENJAMIN
7 DANIELLE
9 VERA
11 JOAQUIM

1 个答案:

答案 0 :(得分:1)

如果您需要知道IN子句中列出的哪些项目未在表中找到匹配项,您可以利用用户定义或内置集合 - 嵌套表或变量数组。下面的示例使用内置集合sys.odcinumberlist()元素,这些元素的数字数据类型为:

/*sample of data */ 
with t1(col) as(
   select level
     from dual
  connect by level <= 11
 )

 select s.column_value as missing_val
   from t1      /* here you list the elements as you would using IN clause*/
  right join table(sys.odcinumberlist(1,2,3,4,5,6,7,8,9,10, 70)) s
     on (t1.col = s.column_value)
  where t1.col is null

结果:

MISSING_VAL
------------
          70

如果列表中的元素属于varchar数据类型,则可以使用OdciVarchar2List()集合,ODCIDateList()表示date数据类型的元素。您还可以自由创建自己的SQL类型集合。例如:

create or replace type T_Type_Name is table of number