2015-12-10 3 views
0

Следующие два запроса:Объединить ОТБОРНОЕ и в 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>; 

На данный момент я храню результат первого запроса в переменную, а затем выполнить второй запрос отдельно, но я пытаюсь объединить эти два запроса, поэтому мне нужно выполнить только один запрос.

Запрос 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 
+0

Ты прибил его. То, что я пытался сделать, COALESCE для меня новичок, спасибо! –