Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Join по разным параметрам: или так, или так  [new]
Andrea911
Member

Откуда:
Сообщений: 25
Здравствуйте! Я только начал изучать SQL, поэтому прошу помощи

Есть три таблицы:
Status (user_id, user_status)
Users1 (id, region, name, group, orders)
Users2 (id, region, name, group, orders)
Данные в таблицах users1 и users2 не совпадают.
Задача:
Вывести в одной таблице объединенные данные, по следующим условиям:
если user_status пользователя = 0, то джойнить из второй таблицы по id и region, если user_status=1, то джойнить со второй таблицей по name и id
Не спрашивайте меня про смысл таблиц, это гипотетическая задача)

Я уже кучу перегуглил, и не могу понять, как сделать, чтобы джойнить по двум разным условиям в зависимости от значения статуса в третьей таблице(
6 мар 17, 19:11    [20268410]     Ответить | Цитировать Сообщить модератору
 Re: Join по разным параметрам: или так, или так  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Сджоинить с обеими таблицыми, а потом в зависимости от user_status выбрать поля из нужной таблицы.
Условие user_status так же вынести в условие джоинов.

Сообщение было отредактировано: 6 мар 17, 19:14
6 мар 17, 19:13    [20268422]     Ответить | Цитировать Сообщить модератору
 Re: Join по разным параметрам: или так, или так  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31962
Andrea911
если user_status пользователя = 0, то джойнить из второй таблицы по id и region, если user_status=1, то джойнить со второй таблицей по name и id
2 LEF JOIN, в условиях соотв. статус из основной таблицы Status.
Если нужно именно фильтровать записи (т.е. если в Users1 и Users2 нет записей для статуса, то не надо ничего показывать), то добавить ещё в конце WHERE, с соотв. условием.
6 мар 17, 19:14    [20268427]     Ответить | Цитировать Сообщить модератору
 Re: Join по разным параметрам: или так, или так  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31962
alexeyvg
Andrea911
если user_status пользователя = 0, то джойнить из второй таблицы по id и region, если user_status=1, то джойнить со второй таблицей по name и id
2 LEF JOIN, в условиях соотв. статус из основной таблицы Status.
Если нужно именно фильтровать записи (т.е. если в Users1 и Users2 нет записей для статуса, то не надо ничего показывать), то добавить ещё в конце WHERE, с соотв. условием.
Ещё вариант - джойнить с подзапросом, в котором UNION ALL собирать записи из таблиц Users1 и Users2.
6 мар 17, 19:15    [20268433]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить