首页 > 解决方案 > 第二个查询中的 UNION 表基于 Oracle sql 中第一个查询的结果

问题描述

我正在努力解决以下问题(我进一步提供伪代码以使我的示例更易于理解)

假设我有 2 个查询,结果我想相互联合

query1 的输出如下所示:

身份证件
1 个产品_1
2 产品_2
3 产品_2
4 产品_1

query2 的输出如下所示:

标识段
1 低
2 高
3 中号
第999章

我需要做的是合并这两个查询的结果,但避免使用 ID = 999 的行

如果有什么方法可以通过基于 query2 的列 ID 中存在的列 ID 的值从 query2 行中提取来使用 UNION 来做到这一点?

我知道下面的代码是不正确的,但它很好地传达了问题的想法:

--query1
(
 SELECT ID, OFFER
 FROM TAB1
 WHERE ID <= 4
) RES1
UNION
--query2
SELECT ID, SEGMENT
FROM TAB1
WHERE ID IN (SELECT ID FROM RES2)

结果应该如下

身份证件
1 个产品_1
2 产品_2
3 产品_2
4 产品_1
1 低
2 高
3 中号

感谢你的帮助

标签: sqloracleunion

解决方案


您的伪代码非常接近。您可以WITH使用方便:

WITH q1 AS (SELECT id, offer FROM tab1 WHERE id <= 4)
   , q2 AS (SELECT id, segment FROM tab1 WHERE id IN (SELECT id FROM q1))
SELECT * FROM q1
UNION ALL
SELECT * FROM q2;

(请注意,如果您不指定ORDER BY子句,您可以按任何顺序获取行。)


推荐阅读