Что случилось с * = и = * для внешних объединений в SQL? - PullRequest
3 голосов
/ 29 октября 2011

Мне было просто любопытно, почему оператор *= для left outer join и правое внешнее объединение '= *' были исключены из стандарта SQL или, по крайней мере, не поддерживаются SQL Server 2005 и?Я прочитал несколько других сообщений об этом конкретном операторе и понимаю, что он может дать некоторые неожиданные результаты.Но если бы это было семантически эквивалентно, я бы подумал, что было бы проще использовать оператор при объединении нескольких таблиц.Во всяком случае, я бы предпочел использовать этот оператор для динамического создания SQL-запросов, а не пытаться получить правильный порядок слов, например:

FROM accounts 
LEFT OUTER JOIN customers 
ON accounts.accountnum = customers.accountnum 
LEFT OUTER JOIN products 
ON customers.accountnum = products.accountnum 
AND customers.id = products.customerid  

, где

FROM accounts, customers, products
WHERE accounts.accountnum *= customers.accountnum AND
      customers.accountnum *= products.accountnum AND
      customers.id *= products.customer.id

может показатьсяпроще разобрать вместе.

Но вернемся к реальному миру, какова была идея для этих операторов, если они не выполняют "истинное" внешнее соединение? Термин Short Hand подразумевает, что он должен делать то же самое, но, безусловно, не в этом случае.

Ответы [ 3 ]

5 голосов
/ 29 октября 2011

MVP SQL Server К. Брайан Келли делает хорошую работу, объясняя это здесь: Почему SQL Server 2005 не допускает НАРУЖНЫЕ СОЕДИНЕНИЯ не в стиле ANSI

1 голос
/ 31 октября 2011

Выполните поиск в Google для статьи Криса Дейта «Внешнее соединение без нулей и меньше слез», предшествующей стандарту SQL-92. Хотя я не смог найти бесплатную копию в Интернете, я нашел документ, который анализирует документ и дает хорошую историю внешнего объединения в SQL. Обратите внимание, что в настоящее время Date будет иметь атрибуты со значениями для этого типа запроса и будет рекомендовать вам вообще избегать внешних объединений;)

1 голос
/ 29 октября 2011

Я не думаю, что они были взяты из стандарта.Я думаю, что они никогда не были в этом.Это было просто соглашение, которое продавцы выполняли, пока не вышел SQL-92, и поставщики решили, что его стоит реализовать.

...