如何在不创建表和插入数据的情况下创建用于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)
我会选择:
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)
| 归档时间: |
|
| 查看次数: |
56204 次 |
| 最近记录: |