Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从“in”查询列表中获取表中不存在的记录_Sql_Oracle - Fatal编程技术网

Sql 从“in”查询列表中获取表中不存在的记录

Sql 从“in”查询列表中获取表中不存在的记录,sql,oracle,Sql,Oracle,在oracle 11g中,我使用了一个包含约500条记录的“in”子句的查询,是否有任何方法可以从表中不存在值的“in”子句中获取记录 例如: 查询: 从名称所在的表中选择* “尼克”、“汤姆”、“露西”、“哈里”、“拉菲尔” 样本表: 在上表中,“TOM”、“HARRY”、“RAFEL”的记录不在In子句中的表中,因此输出应为: TOM HARRY RAFEL 您可以使用要查找的值声明一个集合,然后与引用表执行联接以搜索不匹配的记录: with cte_in as ( select '

在oracle 11g中,我使用了一个包含约500条记录的“in”子句的查询,是否有任何方法可以从表中不存在值的“in”子句中获取记录

例如:

查询:

从名称所在的表中选择* “尼克”、“汤姆”、“露西”、“哈里”、“拉菲尔”

样本表:

在上表中,“TOM”、“HARRY”、“RAFEL”的记录不在In子句中的表中,因此输出应为:

TOM

HARRY

RAFEL

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

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 
另一个解决方案是使用负号

编辑:另一种与格式相近的解决方案


请看小提琴:

我不清楚您的确切问题是什么。使用NOT IN?我不想从表中获取记录,我想从表中不存在的那是name from IN子句中获取记录。您必须将超集'NICK'、'TOM'、'LUCY'、'HARRY'、'RAFEL'放入某个表或CTEwhere is'IN'查询中?您需要使用“in”查询。最简单/最快的方法似乎是将表中的所有值插入表中,然后执行减号或外部联接。如果有其他适合需要的解决方案,没有理由绝对尝试使用IN子句,但问题要求使用“IN”查询。
SELECT nickname
FROM   cte_in
minus
select name 
from   mytable
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;