2015-12-10 84 views
0

以下两个查询:结合了SELECT和UNION ALL

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>; 

此刻我存储在第一查询结果一个变量,然后执行第二个查询seperatly,但我想结合这两个查询,所以我只需要执行一个查询。

查询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; 

这意味着我合并两个完整的表,这显然是一个矫枉过正。

+0

对不起,整个删除/取消删除编辑,我虽然我有解决方案,但事实证明,它没有奏效。 –

回答

4

我不清楚你想要什么。看起来你想从idAValueTableATableB1TableB2,其中有一个匹配的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 
+0

你钉了它。那就是我想要做的,COALESCE对我来说是新的,谢谢! –