2012-03-29 36 views
3

可以說我有三張桌子,客戶,訂單和orderDetails。加入一組

我這樣做:

SELECT orders.ordersId, sum(orderDetails.total) 
FROM orders 
LEFT OUTER JOIN orderDetails ON orders.ordersId = orderDetails.ordersId 
GROUP BY orders.ordersId 

但可以說訂單表包含customersId。如何加入客戶表,以便我還可以將客戶的名稱添加到所選字段中?

感謝,

巴里

+0

使用LEFT OUTER JOIN表上的客戶? – 2012-03-29 19:36:05

回答

2

你能做到這樣,如果需要的話,這將讓你獲得比客戶更名:

SELECT o.ordersId, o.orderTotal, c.customername, c.(other customer data) 
FROM 
(
    SELECT orders.ordersId 
      , sum(orderDetails.total) as orderTotal 
      , orders.customersid 
    FROM orders 
    LEFT OUTER JOIN orderDetails 
      ON orders.ordersId = orderDetails.ordersId 
    GROUP BY orders.ordersId, orders.customersid 
) o 
LEFT JOIN customers c 
    ON o.customersid = c.customersid 
+0

您的內部查詢不會返回字段'customersid',因此無法在外部查詢中引用或加入。它需要增加內部查詢的'SELECT'和'GROUP BY'。 – MatBailie 2012-03-29 19:45:05

+0

@Dems漂亮的漁獲,謝謝指出。這已被修復。 – Taryn 2012-03-29 19:46:14

3
SELECT orders.ordersId, sum(orderDetails.total), customer.name 
FROM orders 
LEFT OUTER JOIN orderDetails ON orders.ordersId = orderDetails.ordersId 
LEFT OUTER JOIN customer on customer.customerid = orders.customerid 
GROUP BY orders.ordersId , customer.name 

嘗試了這一點或類似的東西。

+0

這是行得通的,並且沒有任何問題,但是當從多個表中返回多個附加字段時,它實際上並不能很好地擴展。爲了可維護性,我更願意加入子查詢,但目前我無法投票,因爲這樣的唯一答案是錯誤的;) – MatBailie 2012-03-29 19:47:08

+0

在再次查看時,我也必須同意子查詢方法。這是您發佈的當前查詢的簡單回答。 ;) – Adam 2012-03-29 19:48:46