查询返回表没有的寄存器

时间:2014-08-06 22:56:38

标签: oracle plsql

我有268个注册表列表,我想看看它们中哪些不在表中。我没有使用它,但它返回表的其他寄存器而不是我必须看到的那些。

我有一张ID为1,2,3,4

的表格

我有一个列表(用于构建where子句),ID为:0,1,4,5,99

我需要构建一个返回数字0,5和99的PL / SQL查询。

我尝试了以下内容:

Select * from myTable where ids not in ('0,1,4,5,99')

但是这将返回表格的所有寄存器,而不仅仅是我想要的那些寄存器。我知道我需要把这个列表作为参考,以便返回它,但我不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

这适用于Oracle 11g。使用XMLTABLE的想法是从Oracle: Comma Separated String To Rows 11g博文中借用

WITH numbers AS 
   (
     SELECT '0, 1, 4, 5, 99' numberstring FROM dual
   ),  
     registry AS
   (
     SELECT (column_value).getnumberval() register
     FROM numbers, xmltable(numberstring) 
   )     
SELECT r.register
FROM registry r
LEFT JOIN Table1 t ON r.register = t.id
WHERE t.id IS NULL;

参见工作SQL Fiddle演示。


解决字符串

WITH strings AS 
   (
     SELECT      
      '"LOOKUP - 0971 - 2135",
       "LOOKUP - 0001 - 2424"' numberstring FROM dual
   ),  
     registry AS
   (
     SELECT (column_value).getStringVal() register
     FROM strings, xmltable(numberstring) 
   )     
SELECT r.register
FROM registry r
LEFT JOIN X_LANE t ON r.register = t.x_lane_gid
WHERE t.x_lane_gid IS NULL;

字符串字符串 SQL Fiddle