任务:选择包含属于SelectionItemPattern
类别的产品的所有订单。
结果: OrderNo,OrderDate,产品名称
我写了这个查询,但它返回了笛卡尔积。
‘Sea Food’
问题:我的查询有什么问题?
答案 0 :(得分:1)
您在CROSS JOIN
表上执行customers
,因为您忘记指定连接。这就是为什么你应该在JOIN
子句中使用逗号来使用显式WHERE
语法而不是旧语法。
将查询翻译成显式语法后,您会发现没有涉及WHERE
表的customers
条件:
select
o.orderid,
o.orderdate as "Order Date",
p.productname,
ct.categoryname
from
orders o,
inner join order_details od on od.orderid = o.orderid
inner join products p on p.productid = od.productid
inner join categories ct on ct.categoryid = p.categoryid
cross join customers c -- either you don't need this table, or you need to specify conditions
where
ct.categoryname = 'Seafood'
基本上你得到它的原因是你的where子句省略了涉及customers
表的连接条件,所以你留下了:
from (...), customers -- cross join when joining condition not applied in where clause