У перші дні SQL було вирішено проблему, як поводитися з дублюючими назвами стовпців (див. Нижче примітку).
Щоб запозичити запит з іншої відповіді:
SELECT P.ProductName,
P.ProductRetailPrice,
O.Quantity
FROM Products AS P
INNER JOIN Orders AS O ON O.ProductID = P.ProductID
WHERE O.OrderID = 123456
Стовпець ProductID
(і, можливо, інші) є загальним для обох таблиць, і оскільки синтаксис умови з'єднання вимагає посилання на обидві, "кваліфікація точок" надає розбіжність.
Звичайно, кращим рішенням було ніколи не дозволяти дублювати назви стовпців в першу чергу! На щастя, якщо ви використовуєте новіший NATURAL JOIN
синтаксис, потреба в змінних діапазону P
і O
проходить:
SELECT ProductName, ProductRetailPrice, Quantity
FROM Products NATURAL JOIN Orders
WHERE OrderID = 123456
Але чому AS
ключове слово не є обов'язковим? Мій спогад з особистої дискусії з членом комітету зі стандартів SQL (або Джо Селко, або Х'ю Дарвен) полягав у тому, що їхній спогад полягав у тому, що під час визначення стандарту продукт одного постачальника (Microsoft?) Вимагав його включення, а іншого постачальника продукт (Oracle?) вимагав його упущення, тому обраний компроміс полягав у тому, щоб зробити його необов’язковим. У мене немає цитування на це, ти мені віриш чи ні!
У перші дні реляційної моделі перехресний добуток (або тета-приєднання або рівноз'єднання) відносин, заголовки яких не є суперечливими, виявився таким, що створює відношення з двома однойменними атрибутами; Вирішенням проблеми Кодда в його реляційному обчисленні було використання крапкової кваліфікації, яка пізніше була імітована в SQL (згодом було зрозуміло, що так зване природне з'єднання примітивне без втрат; тобто природне з'єднання може замінити всі тета-приєднання та рівний перехресний продукт.)
Джерело: Бізнес-система 12, Примітки, викладені на слайдах презентації, представлених на семінарі для виконавців TTM, Університет Нортумбрія, 2-3 червня 2011 року Х'ю Дарвен