Oracle-创建一个临时结果集以供查询使用

Loc*_*ock 16 sql oracle

如何在不创建表和插入数据的情况下创建用于SQL的临时结果集?

示例:我有一个列表,例如10个代码.我想将它放入查询中,然后查询数据库以查看该临时列表中的哪些代码不存在于表中.

如果它已经在表中,我可以做类似的事情:

SELECT
  ITEM_CODE
FROM
  TEMP_ITEMS
MINUS
SELECT
   ITEM_CODE
FROM
   M_ITEMS
Run Code Online (Sandbox Code Playgroud)

他们是一种不使用PL/SQL和纯SQL在查询之前创建临时行集的方法吗?请不要回答:

SELECT 1 FROM DUAL
UNION ALL
SELECT 2 FROM DUAL
Run Code Online (Sandbox Code Playgroud)

我在想一些可以在IN语句中提供代码的东西,并将其转换为行以便在以后的查询中使用.

编辑:所以每个人都知道我的目标,基本上我有时会得到一个产品代码列表,我需要找到列表中的哪些代码未在我们的系统中设置.我想快速将其抛入一个SQL语句,这样我就可以看到哪些不在系统中(而不是导入数据等).我通常将这些放入excel,然后做一个公式,如:

="'"&A1&"',"
Run Code Online (Sandbox Code Playgroud)

这样我就可以创建逗号分隔列表了.

rs.*_*rs. 26

如果你使用的是oracle 11g,你可以这样做

with t as 
(
 select (column_value).getnumberval() Codes from xmltable('1,2,3,4,5')
)
SELECT * FROM t
WHERE NOT EXISTS (SELECT 1 FROM M_ITEMS M WHERE codes = M.ITEM_CODE);
Run Code Online (Sandbox Code Playgroud)

要么

with t as 
(
 select (column_value).getstringval() Codes from xmltable('"A","B","C"')
)
SELECT * FROM t
WHERE NOT EXISTS (SELECT 1 FROM M_ITEMS M WHERE codes = M.ITEM_CODE);
Run Code Online (Sandbox Code Playgroud)


Gor*_*off 5

我会选择:

with t as (
    select 1 as val from dual union all
    select 2 as val from dual
)
select . . .
Run Code Online (Sandbox Code Playgroud)

然后在后续查询块中使用“t”或任何你所称的名称。

我不确定使用 select 方法的反对意见是什么。。。只需在 Excel 的列中弹出所需的值,然后通过复制公式为每个值生成代码。然后将结果粘贴回查询界面。

如果要使用临时表,可以使用values子句。或者,如果您只需要 IN 功能,则可以使用字符串函数。将值放入逗号分隔的列表中,并检查它是否与特定值匹配:

where ','||<list>||',' like '%,'||col||',%'
Run Code Online (Sandbox Code Playgroud)