我正在努力解决以下问题(此外,我还提供了伪代码以使我的示例更易于理解)
假设我有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
感谢您的帮助
答案 0 :(得分:2)
您的伪代码非常接近。为了方便起见,您可以使用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
子句,则可以按任何顺序获取行。)