Задача: Выделить все заказы, принадлежащие категории ‘Sea Food’
.Query возвращает декартовую продукцию, если не ожидалось
Результат: OrderNo, OrderDate, Наименование
Я пишу этот запрос, но он возвращает декартово произведение.
select o.orderid, o.orderdate as "Order Date", p.productname , ct.categoryname from orders o,
order_details od , products p , customers c ,categories ct
where
od.orderid = o.orderid and p.productid = od.productid and ct.categoryid = p.categoryid
and ct.categoryname = 'Seafood';
Вопрос: Что случилось с моим запросом?
Во-первых, он использует синтаксис архива, если запятые используются в предложении 'FROM'. Научитесь использовать правильный явный синтаксис JOIN. –
Для объединения таблиц используйте 'join' вместо' where'. Внутренняя работа для них очень различна. Если вы используете предложение where, чтобы присоединиться к вашей таблице, Oracle сначала выполняет декартово произведение всех таблиц, а затем применяет предложения where, поэтому вы получаете декартовский продукт. – Munir
таблица клиентов не используется в предложении where? – cableload