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

Откуда:
Сообщений: 90
День добрый!
Допустим в левой табличке у меня 3 значения по которым я джойню к ней правую. Если в правой больше одного совпадения значения, то итоговая увеличивает кол-во строк на кол-во совпадений. Подскажите можно ли как-нибуть итого избежать более изящным способом, чем:
select t1.fld1, (select top 1 fld2 from t2 where t1.fld3=t2.fld3) zzz from t1

т.е. сджойнить с одним/любым значением во второй таблице....
11 окт 17, 11:38    [20860052]     Ответить | Цитировать Сообщить модератору
 Re: как сделать "один" join если справа много совпадений без select?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Можно это же написать, используя CROSS APPLY. Это более изящно?
11 окт 17, 12:25    [20860342]     Ответить | Цитировать Сообщить модератору
 Re: как сделать "один" join если справа много совпадений без select?  [new]
982183
Member

Откуда: VL
Сообщений: 3351
Может вот так:

select t1.fld1, first(t2.fld2)  where t1.fld3=t2.fld3 group by t1.fld1 from t1,t2
11 окт 17, 12:32    [20860389]     Ответить | Цитировать Сообщить модератору
 Re: как сделать "один" join если справа много совпадений без select?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
982183
Может вот так:

select t1.fld1, first(t2.fld2)  where t1.fld3=t2.fld3 group by t1.fld1 from t1,t2

а редмонде то и не знают пацаны
11 окт 17, 12:33    [20860404]     Ответить | Цитировать Сообщить модератору
 Re: как сделать "один" join если справа много совпадений без select?  [new]
982183
Member

Откуда: VL
Сообщений: 3351
TaPaK,
первый раз слышу
11 окт 17, 12:47    [20860471]     Ответить | Цитировать Сообщить модератору
 Re: как сделать "один" join если справа много совпадений без select?  [new]
Badhabit
Member

Откуда:
Сообщений: 90
iap
Можно это же написать, используя CROSS APPLY. Это более изящно?

Ну в принципе тоже самое) но очевидный плюс что видимо можно сразу несколько столбцов из правой таблице прицепить...
11 окт 17, 12:49    [20860481]     Ответить | Цитировать Сообщить модератору
 Re: как сделать "один" join если справа много совпадений без select?  [new]
Badhabit
Member

Откуда:
Сообщений: 90
982183
Может вот так:

select t1.fld1, first(t2.fld2)  where t1.fld3=t2.fld3 group by t1.fld1 from t1,t2

вроде как изящнее... только не пойму зачем group by тут?
11 окт 17, 12:51    [20860494]     Ответить | Цитировать Сообщить модератору
 Re: как сделать "один" join если справа много совпадений без select?  [new]
982183
Member

Откуда: VL
Сообщений: 3351
[/quot]вроде как изящнее... [/quot]
Проверь. Я не уверен, что понял твою целю.

[/quot]только не пойму зачем group by тут?[/quot]
Не нравится group by, сделай distinct.
А как иначе агрегировать данные?
11 окт 17, 12:54    [20860508]     Ответить | Цитировать Сообщить модератору
 Re: как сделать "один" join если справа много совпадений без select?  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
Badhabit
вроде как изящнее...
вы критерии "изящности" то озвучте
11 окт 17, 13:12    [20860596]     Ответить | Цитировать Сообщить модератору
 Re: как сделать "один" join если справа много совпадений без select?  [new]
982183
Member

Откуда: VL
Сообщений: 3351
А лучше - требуемый конечный результат
11 окт 17, 13:21    [20860646]     Ответить | Цитировать Сообщить модератору
 Re: как сделать "один" join если справа много совпадений без select?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
982183
вроде как изящнее... [/quot]
Проверь. Я не уверен, что понял твою целю.

[/quot]только не пойму зачем group by тут?[/quot]
Не нравится group by, сделай distinct.
А как иначе агрегировать данные?[/quote]Феерично!
А что за FIRST() такой?
11 окт 17, 13:24    [20860669]     Ответить | Цитировать Сообщить модератору
 Re: как сделать "один" join если справа много совпадений без select?  [new]
982183
Member

Откуда: VL
Сообщений: 3351
http://2sql.ru/novosti/sql-first/
11 окт 17, 13:25    [20860679]     Ответить | Цитировать Сообщить модератору
 Re: как сделать "один" join если справа много совпадений без select?  [new]
982183
Member

Откуда: VL
Сообщений: 3351
Ептель моптель, у MS его нет.
Ну тогда min или max, если ему всё равно какая запись.
11 окт 17, 13:29    [20860705]     Ответить | Цитировать Сообщить модератору
 Re: как сделать "один" join если справа много совпадений без select?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
982183
Ептель моптель, у MS его нет.
Ну тогда min или max, если ему всё равно какая запись.

20860404
11 окт 17, 13:33    [20860727]     Ответить | Цитировать Сообщить модератору
 Re: как сделать "один" join если справа много совпадений без select?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
982183
Ептель моптель, у MS его нет
Есть, однако, FIRST_VALUE(...) OVER(ORDER BY ...).
Однако, начиная с SQL2012
11 окт 17, 13:33    [20860730]     Ответить | Цитировать Сообщить модератору
 Re: как сделать "один" join если справа много совпадений без select?  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
982183
Ептель моптель, у MS его нет.
first_value
11 окт 17, 13:34    [20860737]     Ответить | Цитировать Сообщить модератору
 Re: как сделать "один" join если справа много совпадений без select?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Дедушка
982183
Ептель моптель, у MS его нет.
first_value

это решит текущую задачу?
11 окт 17, 13:35    [20860741]     Ответить | Цитировать Сообщить модератору
 Re: как сделать "один" join если справа много совпадений без select?  [new]
982183
Member

Откуда: VL
Сообщений: 3351
Пацаны ждут объяснений о редмонде
11 окт 17, 14:02    [20860894]     Ответить | Цитировать Сообщить модератору
 Re: как сделать "один" join если справа много совпадений без select?  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
TaPaK
это решит текущую задачу?
это был ответ на замечание об отсутствии ф-ии first()
что до "решения"... имхо, стоит обсуждать как только ТС озвучит критерии изящности.
11 окт 17, 14:08    [20860927]     Ответить | Цитировать Сообщить модератору
 Re: как сделать "один" join если справа много совпадений без select?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
982183
Пацаны ждут объяснений о редмонде
В городе Редмонд находится штаб-квартира Microsoft.
Я думаю, имелись в виду пацаны из этого населённого пункта.
11 окт 17, 14:09    [20860935]     Ответить | Цитировать Сообщить модератору
 Re: как сделать "один" join если справа много совпадений без select?  [new]
982183
Member

Откуда: VL
Сообщений: 3351
А я то думаю - причем тут мультиварки
11 окт 17, 14:17    [20860973]     Ответить | Цитировать Сообщить модератору
 Re: как сделать "один" join если справа много совпадений без select?  [new]
ГостьЗОЗ
Guest
Badhabit,

OUTER APPLY
13 ноя 17, 12:43    [20948916]     Ответить | Цитировать Сообщить модератору
 Re: как сделать "один" join если справа много совпадений без select?  [new]
ГостьЗОЗ
Guest
ГостьЗОЗ
Badhabit,

OUTER APPLY



....OUTER APPLY (SELECT TOP 1 .... ORDER BY ....)
13 ноя 17, 12:44    [20948928]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить