- 12.(麻烦)列出所有客户,职位,艺术家,订购数量
SELECT customer_name, title, artist, order_qty
FROM customers,items,orderline, orders
WHERE orders.order_id = orderline.order_id
AND customers.customer_id = orders.customer_id;
我尝试了查询,但不会得到我需要的结果,有人请看看。
结果
'Cora Blanca', 'Under the Sun', 'Donald Arley', '3'
'Cora Blanca', 'Dark Lady', 'Keith Morris', '3'
'Cora Blanca', 'Happy Days', 'Andrea Reid', '3'
'Cora Blanca', 'Top of the Mountain', 'Janice Jones', '3'
'Cora Blanca', 'Streets from Old', 'Sharon Brune', '3'
'Cora Blanca', 'The Hunt', 'Walter Alford', '3'
'Cora Blanca', 'Rainbow Row', 'Judy Ford', '3'
'Cora Blanca', 'Skies Above', 'Alexander Wilson', '3'
'Cora Blanca', 'The Seas and Moon', 'Susan Beeler', '3'
'Cora Blanca', 'Greek Isles', 'Benjamin Caudle', '3'
答案 0 :(得分:1)
你不应该使用你所做的笛卡尔联接,因为它似乎是你试图做的不正确的语法。具体而言,您没有为您尝试JOIN
的每个表指定适当的JOIN
条件。你需要明确说明他们的关系。
试试这个:
SELECT
c.customer_name
,i.title
,i.artist
,ol.order_qty
FROM
Customers AS c
JOIN
Orders AS o
ON o.Customer_Id = c.Customer_Id
JOIN
OrderLine AS ol
ON ol.Order_Id = o.Order_Id
JOIN
Items AS i
ON i.Item_Id = ol.Item_id
您应该在WHERE
子句中使用显式条件来定义ON
条件,而不是使用带有JOIN
子句过滤器的笛卡尔连接。特别是你会注意到这个解决方案在items
和orderline
表上有一个条件,原始查询没有。