使用Mysql进行连接的SQL查询

时间:2014-06-06 21:01:59

标签: mysql sql

enter image description here

enter image description here

enter image description here

- 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'

1 个答案:

答案 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子句过滤器的笛卡尔连接。特别是你会注意到这个解决方案在itemsorderline表上有一个条件,原始查询没有。