2013-10-16 29 views
0

我有一個列表,包含我的IN子句中的10個項目,在我的SELECT中只找到了8個項目。 您如何知道IN子句中包含哪些項目未找到?您如何知道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

使用'NOT IN(..)'... –

回答

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()集合可以是對date數據類型的元素使用或ODCIDateList()。您還可以自由創建自己的SQL類型集合。例如:

create or replace type T_Type_Name is table of number 
+1

這裏是一個[sqlfiddle演示(http://www.sqlfiddle.com/#!4/22784/9) –

+0

完美!!!!謝謝 –

相關問題