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