Этот запрос от современного управления базами данных не так?

Это из текста " Современное управление базами данных", глава 12. Дано:

Supplier_T(SupplierNumber,City)                10,000 records, stored in Detroit
Part_T(PartNumber, Color)                      100,000 records, stored in Chicago
Shipment_T(SupplierNumber, PartNumber)         1,000,000 records, stored in Detroit

Запрос, написанный на SQL, составлен для того, чтобы перечислить номера поставщиков для поставщиков Кливленда красных деталей, приведенных на странице 19:

SELECT Supplier_T.SupplierNumber
FROM Supplier_T, Shipment_T, Part_T
WHERE Supplier_T.City = 'Cleveland'
AND Shipment_T.PartNumber = Part_T.PartNumber
AND Part_T.Color = 'Red';

Но разве это не отсутствует в предложении WHERE,

AND Supplier_T.SupplierNumber = Shipment_T.SupplierNumber

Может быть, я просто слишком педантичен.

1 ответ

Решение

Вполне может быть, что пример приведен для того, чтобы показать, что происходит, когда забывают объединить таблицы! Это называется декартовым соединением, и в результате каждая строка соединяется с каждой другой строкой, создавая намного больший набор результатов, чем ожидалось.

Я полагаю, что если целью запроса является показать красные части, которые хранятся в Кливленде, то запрос будет

SELECT Supplier_T.SupplierNumber
FROM Supplier_T
inner join Shipment_T on Shipment_T.suppliernumber = supplier_t.suppliernumber
inner join Part_T on Part_T.PartNumber = Shipment_T.PartNumber
WHERE Supplier_T.City = 'Cleveland'
AND Part_T.Color = 'Red';  

Тот факт, что в запросе используется синтаксис неявного соединения SQL-89 (из таблицы1, таблицы2, таблицы3), в отличие от синтаксиса явного соединения SQL-92 (из таблицы внутреннего соединения таблицы1), должен указывать на то, что что-то не так! Что написано в тексте после этого запроса?

Другие вопросы по тегам