组合SELECT和UNION ALL

时间:2015-12-10 14:42:51

标签: sql oracle

以下两个问题:

1

SELECT idA, idB FROM tableA WHERE idA = 1;

2

SELECT idB, value FROM tableB1 WHERE idB = <the idB result of query 1>
UNION ALL
SELECT idB, value FROM tableB2 WHERE idB = <the idB result of query 1>;

目前我将第一个查询的结果存储在变量中,然后单独执行第二个查询,但我正在尝试将这两个查询组合在一起,所以我只需要执行一个查询。

查询1返回完整的一行,因此我们不会有多个idB值。并且tableB1tableB2中只有一个条目与此特定idB值匹配。

我似乎无法找到将这两个查询合并为一个的方法,而不会在一个地方爆炸数据空间。例如天真的方法:

SELECT 
    idA, idB 
FROM 
    tableA a,
LEFT JOIN
    (SELECT idB, value FROM tableB1
     UNION ALL
     SELECT idB, value FROM tableB2) b ON b.idB = a.idB
WHERE idA = 1;

这意味着我合并了两个完整的表,这显然是一种过度杀伤。

1 个答案:

答案 0 :(得分:4)

我不清楚你想要什么。您希望从idA转到ValueTableA以及TableB1TableB2,其中任何一个都匹配Value

SELECT A.idA, A.idB, COALESCE(B1.Value, B2.Value)
FROM tableA A
WHERE idA = 1;
LEFT JOIN TableB1 B1 ON B1.idB = A.idB
LEFT JOIN TableB2 B2 on B2.idB = A.idB