2012-03-29 6 views
3

私は3つのテーブル、顧客、注文と注文詳細があると言うことができます。グループに参加することによって

私はこれをやっている:

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を使用しますか? –

答えて

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

+0

@Demsいいキャッチ、それを指摘してくれてありがとう。これは修正されました。 – Taryn

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

+0

もう一度見ても、私はサブクエリの方法にも同意しなければならない。これはあなたの現在の質問が投稿された単純な答えです。 ;) – Adam

関連する問題