我有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')
但是这将返回表格的所有寄存器,而不仅仅是我想要的那些寄存器。我知道我需要把这个列表作为参考,以便返回它,但我不知道该怎么做。
答案 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