从'中获取记录表

时间:2018-04-04 15:08:42

标签: sql oracle

我正在使用“' in'在oracle 11g中有大约500条记录的子句,有没有办法从'中获取记录。表中没有值的子句。

示例:

查询:

  

从表中选择*,其中包含名称   (' NICK'' TOM'' LUCY'' HARRY'' RAFEL&#39);

样本表:

enter image description here

在上表中,记录了' TOM',' HARRY'' RAFEL'表中没有出现在子句中,所以输出应该是:

TOM

HARRY

RAFEL

1 个答案:

答案 0 :(得分:3)

您可以使用您要查找的值声明一个集合,然后使用您的参照表执行连接以搜索不匹配的记录:

with cte_in as  (
select 'NICK' nickname from dual
union all select 'TOM' from dual
union all select 'LUCY' from dual
union all select 'HARRY' from dual
union all select 'RAFEL' from dual
)
SELECT    nickname 
FROM      cte_in cte
LEFT JOIN mytable mt
       ON cte.nickname = mt.NAME
WHERE     mt.NAME IS NULL 

其他解决方案正在使用MINUS

SELECT nickname
FROM   cte_in
minus
select name 
from   mytable

编辑:另一种接近IN格式

的解决方案
WITH cte_in
     AS ( SELECT ( column_value ).getstringval() nickname
          FROM   XMLTABLE('"NICK","TOM","LUCY","HARRY","RAFEL"') ) 
SELECT *
FROM   cte_in
minus
SELECT NAME
FROM   mytable; 

请参阅小提琴:http://sqlfiddle.com/#!4/679ae/11