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

Откуда: From Russia
Сообщений: 146
Всем привет,
Как лучше написать джойн так:
	select * from Message m1 with(nolock)
	join Message m2 on m2.HashCode = m1.HashCode
	where m2.ID = @MsgID
или так:
	select * from Message m1 with(nolock)
	join Message m2 on m2.HashCode = m1.HashCode and m2.ID = @MsgID
29 июл 11, 16:09    [11046139]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше джойнить?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31978
Kudep
Всем привет,
Как лучше написать джойн так:
	select * from Message m1 with(nolock)
	join Message m2 on m2.HashCode = m1.HashCode
	where m2.ID = @MsgID
или так:
	select * from Message m1 with(nolock)
	join Message m2 on m2.HashCode = m1.HashCode and m2.ID = @MsgID

2

но для сервера это всё равно
29 июл 11, 16:15    [11046184]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше джойнить?  [new]
stimpi
Member

Откуда: Киев, Украина
Сообщений: 662
+1 к 2рому варианту, но скуль декларативный язык, и все будет трансформироватся в "оптимальный" план выполнения, который хинтами разве что править можно
29 июл 11, 19:10    [11047067]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше джойнить?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
А почему 2-ой то предпочтительнее? m2.ID = @MsgID не условие джойна, а фильтр по Message. Как то логичнее отделять одно от другого.
29 июл 11, 20:11    [11047176]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше джойнить?  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
в чистой теории вариант №2 легче преобразовать в лефт (если это вдруг понадобится)
29 июл 11, 21:40    [11047301]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше джойнить?  [new]
ё
Guest
Mind
А почему 2-ой то предпочтительнее? m2.ID = @MsgID не условие джойна, а фильтр по Message. Как то логичнее отделять одно от другого.

+1
29 июл 11, 21:52    [11047318]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше джойнить?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31978
Mind
А почему 2-ой то предпочтительнее? m2.ID = @MsgID не условие джойна, а фильтр по Message. Как то логичнее отделять одно от другого.
Исключительно личное предпочтение.

Для меня фильтр по одной таблице - это условие джойна.
29 июл 11, 22:21    [11047377]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше джойнить?  [new]
flexgen
Member

Откуда: Город на песке
Сообщений: 852
alexeyvg
Mind
А почему 2-ой то предпочтительнее? m2.ID = @MsgID не условие джойна, а фильтр по Message. Как то логичнее отделять одно от другого.
Исключительно личное предпочтение.

Для меня фильтр по одной таблице - это условие джойна.


На вкус и цвет, как говорится. Я лично предпочитаю первый вариант, он как-то логичнее, что ли. Связь между полями - в джойн, условие фильтрации - в условия.
29 июл 11, 22:26    [11047392]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше джойнить?  [new]
aleks2
Guest
Вы фсе неправы.
Правильно так
	select * from Message m1 with(nolock)
	join (select * FROM Message WHERE ID = @MsgID) m2 on m2.HashCode = m1.HashCode
ибо наиболее полно и незамутненно отражает логику.
31 июл 11, 06:51    [11049568]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше джойнить?  [new]
Megabyte
Member

Откуда: ближайшее заМКАДье
Сообщений: 4997
aleks2
Вы фсе неправы.
Правильно так
	select * from Message m1 with(nolock)
	join (select * FROM Message WHERE ID = @MsgID) m2 on m2.HashCode = m1.HashCode
ибо наиболее полно и незамутненно отражает логику.

имхо изврат...
2 авг 11, 10:16    [11056815]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить