Могу ли я использовать правильное внешнее соединение и внутреннее соединение вместе? - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь получить данные из 3 таблиц, но я думаю, что мне нужно использовать внутреннее соединение (для соединения TABLE1 и TABLE2) и правое внешнее соединение, потому что мне нужна вся информация из TABLE3, но я не знаю, как это сделать Это. Я попытался это:

select a.TABLE1_ID, e.TABLE2_ID,f.TABLE3_ID
from TABLE1 as a, TABLE2 as e, TABLE3 as f
where a.TABLE1_ID = e.TABLE2_ID and a.TABLE1_COL = f.TABLE3_ID
UNION ALL
SELECT f.TABLE3_ID, NULL
FROM TABLE3 as f
WHERE NOT EXISTS (
    SELECT * FROM TABLE1 as a
    WHERE a.TABLE1_COL = f.TABLE3_ID);

Но я получаю следующую ошибку: Операнды оператора набора или предложение VALUES не имеют одинаковое количество столбцов .. SQLCODE = -421, SQLSTATE = 42826, ДРАЙВЕР = 4.19.56

Как я могу это сделать? Возможно ли это?

** РЕДАКТИРОВАТЬ: Вот результат, который я хотел бы получить:

a.TABLE1_ID | e.TABLE2_ID | f.TABLE3_ID
----------------------------------------
AFR123      | AFR123      | MM145FR123
AFR124      | AFR124      | MM145FR124
NULL        | NULL        | MM145FR125
NULL        | NULL        | MM145FR126  

1 Ответ

0 голосов
/ 30 апреля 2020

Вы описываете LEFT JOIN s:

select a.TABLE1_ID, e.TABLE2_ID, f.TABLE3_ID
from TABLE3 f left join
     TABLE1 a
     ON a.TABLE1_ID = f.TABLE3_ID left join
     TABLE2 e 
     on a.TABLE1_ID = e.TABLE2_ID ; 

Как примечание: если в a есть строка, которая соответствует f, но не имеет соответствующей строки в e, то это сохраняет значения от a. Если вы используете INNER JOIN, а затем RIGHT JOIN, у вас не будет значений в промежуточной таблице. Обычно желательно иметь такие значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...