以下两个问题:
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
值。并且tableB1
或tableB2
中只有一个条目与此特定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;
这意味着我合并了两个完整的表,这显然是一种过度杀伤。
答案 0 :(得分:4)
我不清楚你想要什么。您希望从idA
转到Value
到TableA
以及TableB1
或TableB2
,其中任何一个都匹配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