2013-05-02 5 views
5

私は3つのテーブルを持っており、合計金額が別途必要です。また、私はselectまたはwhere節でフィールドを使用します。Mysqlの参加と残額

SELECT i.*, x.* FROM items AS i 
LEFT JOIN 
(
    SELECT 
    p.item_id 
    ,SUM(p.amount) AS saleAmount 
    ,SUM(IF(p.type=1,pa.amount,0)) AS paidAmount 
    FROM payments AS p 
    LEFT JOIN payment_actions AS pa ON pa.payment_id=p.id 
    GROUP BY p.id 
) AS x ON x.item_id=i.id 

itemsテーブル;

id 
--- 
1 

支払いテーブル。

id | item_id | amount 
--------------------------- 
1 | 1  | 300 

payment_actions table;

id | payment_id | amount 
--------------------------- 
1 | 1   | 100 
1 | 1   | 50 

結果は次のとおりです。ここで

saleAmount | paidAmount 
-------------------------- 
    300  | 150 
+0

ための簡単な方法で、いくつかのサンプルデータを投稿してください? –

+0

私は質問 –

答えて

11

は、ご希望の出力が何であるかを、あなたの希望する結果

SELECT 
    i.id, 
    p.amount, 
    pa.amount 
FROM items AS i 
    LEFT JOIN (SELECT 
      id, 
      item_id, 
      SUM(amount) amount 
     FROM payments 
     GROUP BY item_id) AS p 
    ON p.item_id = i.id 
    LEFT JOIN (SELECT 
      payment_id, 
      sUM(amount) amount 
     FROM payment_actions) AS pa 
    ON pa.payment_id = p.id 
group by i.id 
+0

を更新しました.payment_actionsに2つのレコードがある場合、レコードは支払いのため繰返されるため、saleAmount = 600となります。 saleAmountは300である必要があります –

+0

@MertEmirあなたがテストできるクエリを編集しました –

+0

payment_idは支払いテーブルのidフィールドです。アイテムテーブルではありません:( –