我有一个相当复杂和耗时的查询,它返回一个包含两列的结果集:
| ID1 | ID2
1 10
2 11
3 15
我希望将这些结果放在一列中:
| ID
1
10
2
11
3
15
这是否可以在(oracle)sql中使用?
(简化)查询如下所示:
SELECT adr.nad_nkt_id id1, firmenadr.nad_nkt_id id2 FROM nav_adressen adr,
nav_kontakte kontakt, nav_kontakte firma, nav_adressen firmenadr WHERE
kontakt.nkt_id = adr.nad_nkt_id AND
firma.nkt_id (+)= kontakt.nkt_nkt_id AND
firmenadr.nad_id (+)= firma.nkt_id AND
(firmenadr.nad_strasse like '%needle%' OR
adr.nad_strasse like '%needle%');
答案 0 :(得分:2)
您在UNION
之后:
SELECT ID1
FROM YourTable
UNION
SELECT ID2
FROM YourTable
UNION
将返回不同的项目,UNION ALL
将返回所有项目(因此更快)。
考虑到您正在进行的过滤/加入的数量,首先将过滤过滤到临时表然后运行UNION
。
答案 1 :(得分:2)
select ID1 as ID from TableA
union
select ID2 as ID from TableA
答案 2 :(得分:1)
with source as (
SELECT adr.nad_nkt_id id1, firmenadr.nad_nkt_id id2 FROM nav_adressen adr,
nav_kontakte kontakt, nav_kontakte firma, nav_adressen firmenadr WHERE
kontakt.nkt_id = adr.nad_nkt_id AND
firma.nkt_id (+)= kontakt.nkt_nkt_id AND
firmenadr.nad_id (+)= firma.nkt_id AND
(firmenadr.nad_strasse like '%needle%' OR
adr.nad_strasse like '%needle%')
)
select decode(x.l, 1, a.id1, 2, a.id2) as id
from source a
cross join (select level as l from dual connect by level <=2) x
在这种情况下,您不需要扫描结果集两次。它可能比union方法更快。