Соединение двух таблиц, одна из которых содержит другую - PullRequest
1 голос
/ 25 июня 2019

Я новичок в мире SQL (моя проблема может быть очень легко решаема).Кроме того, я работаю исключительно над Access.

Я француз, и я понимаю, что мне сложно объяснить, поэтому я дам вам демо после.У меня есть две таблицы, A и B. У обеих есть идентификатор столбца, и все идентификаторы B находятся в A (но B имеет разные столбцы, однако) Я хотел бы присоединиться к ним, основываясь на id, конечно, чтобы получитьтаблица, содержащая A плюс B, когда есть соответствующий идентификатор.Следовательно, результат должен иметь точное количество строк в виде таблицы A.

Table A
id - value1 - value2
1      0.5      0.6
2      0.4      0.9
3      0.4      1
4      0.8      1

Table B
id - name1 - name2
1     az      at
4     df      ml

Result:

id- value1- value2 - name1- name2
1    0.5     0.6       az    at
2    0.4     0.9
3    0.4      1    
4    0.8      1        df    ml

Когда элемент A отсутствует в B, мне все еще нужно иметь его в результате с нулевым значением в столбцах, гдеинформация отсутствует.Если вы не понимаете мой английский, просто посмотрите на демо-версию, это говорит само за себя

Я попытался самостоятельно написать FULL OUTER JOIN (потому что он не существует в Access), но результат, который я получаю,таблица с большим количеством дубликатов.Я также пробовал много JOIN, но я всегда получаю таблицу с гораздо большим количеством строк, чем A

Заранее спасибо:)

1 Ответ

2 голосов
/ 25 июня 2019

Я думаю, что вам просто нужно левое соединение:

SELECT
    a.id,
    a.value1,
    a.value2,
    b.name1,
    b.name2
FROM TableA a
LEFT JOIN TableB b
    ON a.id = b.id;

Левое соединение гарантирует, что каждая строка в TableA появится в наборе результатов, даже если значение id для данной строкине совпадает ни с чем в TableB.

Если вы не хотите, чтобы NULL появлялся в полях name1 и name2 для тех записей, в которых не было совпадений, тогда подумайте об использованииNz(name1, '') для отображения пустой строки.

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