Когда я ввожу этот запрос,Почему SQL возвращает слишком много результатов?
SELECT OrderDetails.OrderDetailID, Customers.CustomerName
FROM OrderDetails, Customers
NATURAL JOIN Products
NATURAL JOIN Customers
WHERE SupplierID = 5;
1001 записи возвращаются.
Когда я ввожу этот запрос,
SELECT OrderDetailID
FROM OrderDetails
NATURAL JOIN Products
WHERE SupplierID = 5;
11 записи возвращаются
Как и следовало ожидать есть 91 записей в таблице Customer и 11 результаты возвращаются во втором запросе и 91 * 11 = 1001. Однако я не знаю, как избавиться от этого и предотвратить дублирование результатов, возвращаемых в первом запросе, таком как это.
схемы присоединено: http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all
Я бы держаться подальше от естественных соединений, они вам сэкономить небольшую сумму, чтобы печатать никакой реальной пользу и а много непредсказуемости в долгосрочной перспективе (например, позже, после того, как проект вырос, к таблицам добавляются «стандартизованные» временные метки, теперь ваша ранее работающая NATURAL JOIN возвращает результаты только с идентичными отметками времени). – Uueerdo
^^ Да, пожалуйста, разместите структуры таблиц, чтобы мы могли дать точный ответ, не догадываясь. Но проблема заключается в использовании 'FROM OrderDetails, Customers', в котором вы создали декартово произведение с неявным внутренним соединением из-за синтаксиса запятой. –
Ссылка, которую вы включили, фактически не показывает схему. Пожалуйста, отредактируйте вопрос, чтобы добавить инструкции 'CREATE TABLE' непосредственно здесь. –