powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Left / Right join в зависимости от параметра
8 сообщений из 8, страница 1 из 1
Left / Right join в зависимости от параметра
    #38133915
Remind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно сабж. Требуется что-то вроде:

Код: sql
1.
2.
3.
select * from table1 t1
case when flag = 0 then left join else right join end
table2 t2 on t2.id = t1.id



Подскажите как это лучше всего реализовать.
...
Рейтинг: 0 / 0
Left / Right join в зависимости от параметра
    #38133961
Гость333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Remind,

Код: sql
1.
2.
3.
4.
if @flag = 0
    select * from table1 t1 left join table2 t2 on t2.id = t1.id
else
    select * from table1 t1 right join table2 t2 on t2.id = t1.id
...
Рейтинг: 0 / 0
Left / Right join в зависимости от параметра
    #38133975
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Remind,

навскидку

Код: sql
1.
2.
3.
4.
select * 
from table1 t1
full join table2 t2 on t2.id = t1.id
where (flag = 0 and t2.id is null) or (flag <> 0 and t1.id is null)



или подобно же через union all
...
Рейтинг: 0 / 0
Left / Right join в зависимости от параметра
    #38133980
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shakill, всё не так, надо

Код: sql
1.
2.
3.
4.
select * 
from table1 t1
full join table2 t2 on t2.id = t1.id
where (flag = 0 and t1.id is not null) or (flag <> 0 and t2.id is not null)
...
Рейтинг: 0 / 0
Left / Right join в зависимости от параметра
    #38133990
Гость333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shakill
Код: sql
1.
2.
3.
4.
select * 
from table1 t1
full join table2 t2 on t2.id = t1.id
where (flag = 0 and t2.id is null) or (flag <> 0 and t1.id is null)


Ответ неверный. Из вашего итогового результата исключается результат inner join'а этих таблиц. Для left/right join'ов такого не происходит.
...
Рейтинг: 0 / 0
Left / Right join в зависимости от параметра
    #38133994
Гость333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShakillShakill, всё не так, надо

Код: sql
1.
2.
3.
4.
select * 
from table1 t1
full join table2 t2 on t2.id = t1.id
where (flag = 0 and t1.id is not null) or (flag <> 0 and t2.id is not null)


А теперь представим, что в одной таблице миллион записей, а во второй — одна запись. Оптимальные планы для left/right join'ов должны существенно различаться для этих случаев.
...
Рейтинг: 0 / 0
Left / Right join в зависимости от параметра
    #38134019
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость333ShakillShakill, всё не так, надо

Код: sql
1.
2.
3.
4.
select * 
from table1 t1
full join table2 t2 on t2.id = t1.id
where (flag = 0 and t1.id is not null) or (flag <> 0 and t2.id is not null)


А теперь представим, что в одной таблице миллион записей, а во второй — одна запись. Оптимальные планы для left/right join'ов должны существенно различаться для этих случаев.

ну вот тогда

Код: sql
1.
2.
3.
select * from table1 t1 left join table2 t2 on t2.id = t1.id where flag = 0
union all
select * from table1 t1 right join table2 t2 on t2.id = t1.id where flag <> 0
...
Рейтинг: 0 / 0
Left / Right join в зависимости от параметра
    #38134205
Remind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, вариант с if else мне больше нравится
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Left / Right join в зависимости от параметра
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]