Этот запрос от современного управления базами данных не так?
Это из текста " Современное управление базами данных", глава 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), должен указывать на то, что что-то не так! Что написано в тексте после этого запроса?