Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
подскажите что оптимальней подзапрос или объединение?
|
|||
|---|---|---|---|
|
#18+
Уважаемые коллеги, подскажите что оптимальней подзапрос или объединение? Есть таблица 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2001, 09:40 |
|
||
|
подскажите что оптимальней подзапрос или объединение?
|
|||
|---|---|---|---|
|
#18+
Не могу понять откуда мог появиться вариант 1. INNER JOIN однозначно. Даже на тысяче записей в QA ответ, я думаю, был бы очевиден. ЗЫ. (Может я не уловил суть вопроса?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2001, 10:30 |
|
||
|
подскажите что оптимальней подзапрос или объединение?
|
|||
|---|---|---|---|
|
#18+
Спасибо. В свое оправдание скажу что ответ был нужен моему коллеге, которому было нужно услышать более авторитетное мнение чем мое. Думаю, топик исчерпан. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2001, 14:15 |
|
||
|
подскажите что оптимальней подзапрос или объединение?
|
|||
|---|---|---|---|
|
#18+
Если связь между таблицами 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 выберет как раз то, что нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2001, 14:48 |
|
||
|
подскажите что оптимальней подзапрос или объединение?
|
|||
|---|---|---|---|
|
#18+
На самом деле, эти запросы потенциально могут вернуть разные наборы данных. 1-ый запрос - это аналог LEFT OUTER JOIN, а 2-ой - как есть INNER JOIN За этим ходить далеко не надо, достаточно посмотреть графические планы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2001, 14:50 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32018588&tid=1824700]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
2ms |
| others: | 216ms |
| total: | 349ms |

| 0 / 0 |
