2016-04-06 6 views
1

Я пытаюсь соединить две таблицы, как это:SQL - не знаю, как для объединения таблиц

Таблица A

ID Value1 
1  A 
2  B 
3  C 

Таблица B

ID Value2 
1  A 
3  B 
4  C 

Результат должен быть:

ID Value1 Value2 
1  A  A 
2  B  null 
3  C  B 
4  null C 

Т.е. присоедините таблицу A к таблице B по идентификатору. Если ID не существует в таблице А, добавить идентификатор из таблицы B.

Ближайший я пришел это:

SELECT 
    a.ID, a.Value1, b.Value2 
FROM 
    TableA a 
OUTER JOIN 
    TableB b ON a.ID = b.ID 

Это дает мне новые строки из TableB, но ID является нулевым ,

Как это сделать?

+0

LEFT JOIN - это путь. – jarlh

+0

Левое соединение не будет работать, чтобы получить ожидаемый результат. – nhouser9

+0

LEFT JOIN не добавляет окончательную строку, она просто добавляет столбец Value2. OUTER JOIN добавляет столбец Value2 и конечную строку, но не идентификатор в этой строке. – schneiju

ответ

5

Вы очень близки, вам просто нужно немного нажать в правильном направлении:

SELECT COALESCE(a.ID, B.ID) As ID, a.Value1, b.Value2 
FROM TableA a 
FULL OUTER JOIN TableB b ON a.ID=b.ID 

COALESCE функция возвращает первый параметр он получает, что не является нулевым. поскольку это полное внешнее соединение, a.id будет иметь значение null для одной строки, а b.id будет иметь значение null в другой строке.

+0

'FULL OUTER JOIN' не доступен для всех СУБД. – sagi

+0

Это было именно то, что мне нужно! Спасибо за быстрый ответ. – schneiju

+0

Внешнее соединение @sagi и полное внешнее соединение в основном одинаковы, хотя последнее является более читаемым IMO. если OP использует внешнее соединение, он должен также использовать полное внешнее соединение.Я не знаю ни одной базы данных, которая поддерживает «внешнее соединение», но не «полное внешнее соединение». –

0

Попробуйте это:

SELECT * 
FROM TableA A 
FULL OUTER JOIN TableB B 
ON A.ID = B.ID; 

Просто примечание: вы не должны назвать свои таблицы в SQL с пробелами в них.

+0

, который возвращает 4 столбца: id, id, value1, value2. –

+0

'FULL OUTER JOIN' не доступен для всех СУБД. – sagi

0

Помните основной для соединения различных таблиц

SELECT column_name(s) 
FROM table1 
FULL OUTER JOIN table2 
ON table1.column_name=table2.column_name; 

Для вашего случая:

SELECT a.value1, b.value2 
FROM TableA a 
FULL OUTER JOIN TableB b ON a.ID=b.ID 

запомнить полное внешнее соединение

FULL OUTER JOIN ключевое слово возвращает все строки из таблицы (TABLEA) и из таблицы (tableB), а ключевое слово FULL OUTER JOIN объединяет результат как LEFT, так и RIGHT.

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