powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Два вопроса
8 сообщений из 8, страница 1 из 1
Два вопроса
    #40025197
Здравствуйте!

Помогите, пожалуйста, разобраться с 2 вопросами по T-SQL:
1. В чем отличие вложенных связок вида:
Код: sql
1.
2.
3.
4.
5.
6.
...
LEFT JOIN table1 t1
    JOIN table2 t2
        ON t2.f_t1 = t1.id
ON t1.id = x.id
...


от последовательных связок вида:
Код: sql
1.
2.
3.
4.
5.
6.
...
LEFT JOIN table1 t1
    ON t1.id = x.id
JOIN table2 t2
    ON t2.f_t1 = t1.id
...


и когда они нужны?

2. В запросе вида:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT
  t1.id
FROM table_1 t1
JOIN (
  SELECT 
    t2.id
  FROM table_2 t2
  JOIN table_x t1 
    ON t1.id = t2.id
) x ON x.id = t1.id


в подзапросе JOIN-а t1.id сначала будет искаться среди таблиц вложенного селекта(связка t1.id = t2.id будет производиться по полю id таблицы table_x), и только если поле не найдется, то будет считаться, что t1.id это поле таблицы table_1?



желаю Вам счастья
...
Рейтинг: 0 / 0
Два вопроса
    #40025206
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Борис Гаркун,

В первом случае между таблицами table1 и table2 происходит выбор данных, совпадающих в правой и левой таблице и этот набор соединяется "слева" с данными таблицы выше

В втором случае на результат левого объединения таблицы x и таблицы table1 накладывается фильтр точного совпадения полученного результата с набором данных таблицы table2. В итоге часть строк из таблицы x может не попасть в результирующий набор.
...
Рейтинг: 0 / 0
Два вопроса
    #40025286
Владислав Колосов
Борис Гаркун,

В первом случае между таблицами table1 и table2 происходит выбор данных, совпадающих в правой и левой таблице и этот набор соединяется "слева" с данными таблицы выше

В втором случае на результат левого объединения таблицы x и таблицы table1 накладывается фильтр точного совпадения полученного результата с набором данных таблицы table2. В итоге часть строк из таблицы x может не попасть в результирующий набор.

Правая и левая таблицы это table1 и table2?

Во втором случае получается будут отловлены только те данные из таблицы x, для которых есть сопоставления в таблице1?
...
Рейтинг: 0 / 0
Два вопроса
    #40025299
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Борис Гаркун,

да, второй запрос эквивалентен запросу

Код: sql
1.
2.
3.
4.
5.
6.
...
JOIN table1 t1
    ON t1.id = x.id
JOIN table2 t2
    ON t2.f_t1 = t1.id
...
...
Рейтинг: 0 / 0
Два вопроса
    #40025332
Спасибо, Владислав. Осталось разобраться со 2-м вопросом... :)
...
Рейтинг: 0 / 0
Два вопроса
    #40025358
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Борис Гаркун
Спасибо, Владислав. Осталось разобраться со 2-м вопросом... :)

Подзапрос тут это отдельный запрос, который со внешним никак в данном случае не связан. Сначала сджойнятся table_2 и table_x по полю id, потом результат сджойнится с table_1 снова по полю id результата и полю id table_1.
...
Рейтинг: 0 / 0
Два вопроса
    #40025411
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Борис Гаркун
Спасибо, Владислав. Осталось разобраться со 2-м вопросом... :)

Подзапрос тут это отдельный запрос, который со внешним никак в данном случае не связан. Сначала сджойнятся table_2 и table_x по полю id, потом результат сджойнится с table_1 снова по полю id результата и полю id table_1.
почему-то мне кажется, что оптимизатор откроет скобки и получится обычный иннер джойн
...
Рейтинг: 0 / 0
Два вопроса
    #40025413
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
почему-то мне кажется, что оптимизатор откроет скобки и получится обычный иннер джойн

Да, скорее всего, так и будет, но вопрос (как я его понял) был о том, как будет себя это вести с учетом того, что алиас у двух таблиц (table_1 t1 и table_x t1) "внутри" и "снаружи" одинаковый - похоже автора именно это смущало. Я, как бы, на пальцах объяснил, что разницы никакой, что они разные, что одинаковые - "внутренний" алиас t1 просто скроет "внешний".
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Два вопроса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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