При использовании вспомогательного соединения я заметил два разных способа получения одинаковых результатов. Внутри подсоединения используется «выбор» для объединения двух таблиц, а затем присваивается псевдоним, на который ссылаются в последующих строках. Другой просто объединяет две таблицы «анонимно», а в последующих строках используются псевдонимы таблиц Sub-Join. У меня есть пример кода ниже. Мои вопросы:
Это эквивалентно и одно только сохраняет нажатия клавиш?
Создает ли один, использующий select, временную таблицу, а другой - нет?
Будет ли разница в производительности между ними? Не думаю, что будет на основе анализатора исполнения, но подумал, что спрошу.
Есть ли «имя» для одного или других «стиля подчиненного соединения» (например, подчиненное присоединение с псевдонимом или анонимное подчиненное соединение?)
Что касается правил области видимости псевдонимов таблиц и столбцов, есть ли какие-нибудь хорошие документы, на которые кто-то мог бы указать мне, которые могли бы объяснить подобные ситуации? Я искал и не могу найти ничего подходящего (хотя я не уверен, что ищу «правильно»)?
Вот два запроса:
SELECT bp1.*, b1.*
from Bugs b1
JOIN BugsProducts bp1 ON b1.bug_id = bp1.bug_id
LEFT OUTER JOIN (select b2.*, bp2.product_id
from Bugs b2
JOIN BugsProducts bp2 ON b2.bug_id = bp2.bug_id) AS sub1
ON (bp1.product_id = sub1.product_id AND (b1.date_reported < sub1.date_reported))
WHERE sub1.bug_id IS NULL;
SELECT bp1.*, b1.*
from Bugs b1
JOIN BugsProducts bp1 ON b1.bug_id = bp1.bug_id
LEFT OUTER JOIN (Bugs b2 JOIN BugsProducts bp2 ON b2.bug_id = bp2.bug_id)
ON (bp1.product_id = bp2.product_id AND (b1.date_reported < b2.date_reported))
WHERE b2.bug_id IS NULL;