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

Kar*_*sus 3 sql oracle union

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

\n

假设我有 2 个查询,我想将其结果联合起来

\n

query1 输出如下:

\n
\nID 报价\n1 prod_1\n2 prod_2\n3 prod_2\n4 prod_1\n
\n

query2 输出如下:

\n
\nID 段\n1 低\n2 高\n3 中\n999 中\n
\n

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

\n

是否有任何方法可以通过根据 query2 的列 ID 中存在的列 ID 的值从 query2 中提取行来使用 UNION 来执行此操作?

\n

我知道下面的代码是不正确的,但它很大程度上传达了 \xe2\x80\x8b\xe2\x80\x8b 这个问题的想法:

\n
--query1\n(\n SELECT ID, OFFER\n FROM TAB1\n WHERE ID <= 4\n) RES1\nUNION\n--query2\nSELECT ID, SEGMENT\nFROM TAB1\nWHERE ID IN (SELECT ID FROM RES2)\n
Run Code Online (Sandbox Code Playgroud)\n

结果应如下

\n
\nID 报价\n1 prod_1\n2 prod_2\n3 prod_2\n4 prod_1\n1 低\n2 高\n3 中\n
\n

感谢你的帮助

\n

Tho*_*ner 6

你的伪代码非常接近。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;
Run Code Online (Sandbox Code Playgroud)

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