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

Код: 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
01.02.2013, 16:05
    #38133961
Гость333
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Left / Right join в зависимости от параметра
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
01.02.2013, 16:09
    #38133975
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Left / Right join в зависимости от параметра
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
01.02.2013, 16:13
    #38133980
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Left / Right join в зависимости от параметра
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
01.02.2013, 16:17
    #38133990
Гость333
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Left / Right join в зависимости от параметра
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
01.02.2013, 16:19
    #38133994
Гость333
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Left / Right join в зависимости от параметра
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
01.02.2013, 16:32
    #38134019
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Left / Right join в зависимости от параметра
Гость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
01.02.2013, 18:13
    #38134205
Remind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Left / Right join в зависимости от параметра
Спасибо, вариант с if else мне больше нравится
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Left / Right join в зависимости от параметра / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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