#sql #sql-server
#sql #sql-сервер
Вопрос:
У меня есть две таблицы, заполненные двумя файлами, из которых table1 всегда имеет на одну строку больше, чем вторая.
Я хочу объединить две таблицы в одну. Когда я использую right join
, например
select *
from table2
right join table1 on table1.id = table2.id and table1.eq_nb = table2.eq_nb
У меня будет 4 комбинации для eq_nb = 25
, потому что это повторяется два раза.
Но я скорее хочу, чтобы столбцы были рядом
Чтобы знать, у меня нет условий по времени прибытия и отправления каждого eq_nb (я не могу добавить что-то вроде datediff(second,table1.arrival_time,table2.depart_time) < X
)
таблица1:
id | eq_nb | arival_time
-------------------------------------
1 | 25 | 05:30:15.231
-------------------------------------
2 | 50 | 06:30:15.231
-------------------------------------
3 | 7 | 07:30:15.231
-------------------------------------
1 | 25 | 08:30:15.231
-------------------------------------
5 | 27 | 09:30:15.231
-------------------------------------
таблица2:
id | eq_nb | depart_time
----------------------------------
1 | 25 | 05:31:15.231
----------------------------------
2 | 50 | 06:31:15.231
----------------------------------
3 | 7 | 07:31:15.231
----------------------------------
1 | 25 | 08:31:15.231
----------------------------------
желаемый результат:
id | eq_nb | arrival_time | depart_time
-------------------------------------------------------
1 | 25 | 05:30:15.231 | 05:31:15.231
-------------------------------------------------------
2 | 50 | 06:30:15.231 | 06:31:15.231
-------------------------------------------------------
3 | 7 | 07:30:15.231 | 07:31:15.231
-------------------------------------------------------
1 | 25 | 08:30:15.231 | 08:31:15.231
--------------------------------------------------------
5 | 27 | 09:30:15.231 | NULL
--------------------------------------------------------
Комментарии:
1. Как вы думаете, почему вы получите несколько комбинаций с объединением? Вы пробовали это — тот факт, что вы объединяетесь по значению id в каждой таблице, предотвращает расширение многократного появления 25. Пожалуйста, покажите результат, который вы получаете от этого запроса
2. идентификатор здесь не уникален, но вы дали мне идею создать идентификатор для моих таблиц
3. «идентификатор здесь не уникален» Нет, но комбинация
id
иeq_nb
, похоже, есть. Что с ними не так?
Ответ №1:
left join
должен делать то, что вы хотите:
select *
from table1 t1 left join
table2 t2
on t1.id = t2.id and t1.eq_nb = t2.eq_nb;
Учитывая ваши данные, id
они уникальны, поэтому дублирования быть не должно. Примечание: Это эквивалентно вашему первому запросу; left join
обычно его легче выполнить, потому что все строки в первой таблице находятся в результирующем наборе.
Вот db<>скрипка, иллюстрирующая, что это работает.