2016-03-10 5 views
2

Я ниже таблиц и отношений:Получение всех дочерних записей на основе родительской записи таблицы

enter image description here

И мне нужно получить записи, как показано ниже:

enter image description here

Я не уверен, как я его получу. Я пытаюсь выполнить следующий запрос, но он показывает только 3 записи.

SELECT A_NO, B_NO, C_NO 
FROM 
(
    (SELECT * FROM S_A) A Full Outer Join 
    (SELECT * FROM S_B) B on A.ROW_ID = B.A_ID FULL OUTER JOIN 
    (SELECT * FROM S_C) C on A.ROW_ID = C.A_ID 
) 
WHERE A.ROW_ID = '1' 
+0

Благодарим за сообщение о вашей схеме, желаемых результатах и ​​попытках! – JNevill

ответ

2

Потому что нет никакой связи между S_A-> S_B и S_A-> S_C здесь a UNION is the right way to go.

SELECT 
    S_A.A_ID, 
    S_B.B_NO, 
    NULL as C_NO 
FROM 
    S_A INNER JOIN S_B on S_A.A_ID = S_B.A_ID 
UNION ALL 
SELECT 
    S_A.A_ID, 
    NULL as B_NO 
    S_C.C_NO 
FROM 
    S_A INNER JOIN S_C on S_A.A_ID = S_C.A_ID 

Я полагаю you could do this withFULL OUTER JOIN, но это неуклюжее, сбивает с толку, и, вероятно, не будет любой более быстрый для обработки, так как вам нужно будет COALESCE() и присоединиться к подзапросам.

SELECT 
    COALESCE(T1.A_ID, T2.A_ID), 
    T1.B_NO, 
    T2.C_NO 
FROM 
    (
    SELECT 
     S_A.A_ID, 
     S_B.B_NO, 
     CAST(NULL as int) as C_NO 
    FROM 
     S_A INNER JOIN S_B on S_A.A_ID = S_B.A_ID 
) as t1 
    FULL OUTER JOIN 
    (
    SELECT 
     S_A.A_ID, 
     CAST(NULL as int) as B_NO, 
     S_C.C_NO 
    FROM 
     S_A INNER JOIN S_C on S_A.A_ID = S_C.A_ID 
) as t2 ON t1.A_ID = T2.A_ID AND T1.B_NO = T2.B_NO 
+1

Эффективное воздействие будет таким высоким? – Bill

+0

Ну ... это единственный способ получить нужные результаты. Это не должно быть хуже, чем 'FULL OUTER JOIN' на трех производных таблицах, как вы, были нацелены на вашу попытку. Чтобы сузить значение 'A.Row_ID = '1'', вам нужно вставить' WHERE' в оба оператора Select. Это должно быть довольно быстро. – JNevill

+1

Можем ли мы добиться этого с помощью внутреннего запроса? – Bill

Смежные вопросы