powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / подскажите что оптимальней подзапрос или объединение?
5 сообщений из 5, страница 1 из 1
подскажите что оптимальней подзапрос или объединение?
    #32018551
Antei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые коллеги, подскажите что оптимальней подзапрос или объединение?

Есть таблица T1 со структурой:
int ID,
varchar Name
int LinkToT2 (ссылка на T2)

Есть таблица T2 со структурой:
int ID,
varchar Name

Нужно сделать запрос к T1, ну и заодно вытащить данные из T2
Какой запрос будет опримальнее и почему?

select
T1.ID,
T1.Name,
(select Name from T2 where T1.LinkToT2=T2.ID) as T2Name
from T1

или

select
T1.ID,
T1.Name,
T2.Name as T2Name
from
T1
inner join T2 on T1.LinkToT2=T1.ID
...
Рейтинг: 0 / 0
подскажите что оптимальней подзапрос или объединение?
    #32018558
Alik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не могу понять откуда мог появиться вариант 1.

INNER JOIN однозначно.

Даже на тысяче записей в QA ответ, я думаю, был бы очевиден.

ЗЫ.
(Может я не уловил суть вопроса?)
...
Рейтинг: 0 / 0
подскажите что оптимальней подзапрос или объединение?
    #32018583
Antei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. В свое оправдание скажу что ответ был нужен моему коллеге, которому
было нужно услышать более авторитетное мнение чем мое. Думаю, топик исчерпан.
...
Рейтинг: 0 / 0
подскажите что оптимальней подзапрос или объединение?
    #32018587
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если связь между таблицами 1-1, то конечно INNER JOIN - это правильное решение,
а вот если 1-много, то IMHO не все так однозначно

Например, нужно вывести T1.ID, T1.Name с T2.Name, у которого наибольшее количество записей

Если использовать
select T1.ID, T1.Name, T2.Name as T2Name, COUNT(*)
from T1 inner join T2 on T1.LinkToT2=T1.ID
GROUP BY T1.ID, T1.Name, T2.Name
то для каждого T1.ID, T1.Name выберутся все варианты T2.Name, а не один

А вот данный запрос
select T1.ID, T1.Name,
(SELECT TOP 1 T2.Name FROM T2 WHERE T1.LinkToT2=T2.ID GROUP BY T2.Name ORDER BY COUNT(*) DESC) as T2Name
from T1
выберет как раз то, что нужно.
...
Рейтинг: 0 / 0
подскажите что оптимальней подзапрос или объединение?
    #32018588
На самом деле, эти запросы потенциально могут вернуть разные наборы данных.
1-ый запрос - это аналог LEFT OUTER JOIN,
а 2-ой - как есть INNER JOIN

За этим ходить далеко не надо, достаточно посмотреть графические планы.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / подскажите что оптимальней подзапрос или объединение?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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