基于Oracle SQL中第一个查询的结果的第二个查询中的UNION表

问题描述

我正在努力解决以下问题(此外,我还提供了伪代码以使我的示例更易于理解)

假设我有2个查询,这些查询导致我想相互合并

query1的输出如下所示:

ID   OFFER
1    prod_1
2    prod_2
3    prod_2
4    prod_1

query2的输出如下:

ID   SEGMENT
1    LOW
2    HIGH
3    MED
999  MED

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

是否有任何方法可以使用UNION通过从query2行中提取基于查询2列ID中存在的列ID的值?

我知道以下代码是不正确的,但它极大地传达了这个问题的想法:

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

结果应如下

ID   OFFER
1    prod_1
2    prod_2
3    prod_2
4    prod_1
1    LOW
2    HIGH
3    MED

感谢您的帮助

解决方法

您的伪代码非常接近。为了方便起见,您可以使用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子句,则可以按任何顺序获取行。)