2013-05-02 45 views
5

Tôi có ba bảng và tôi cần số tiền riêng biệt. Ngoài ra tôi sẽ sử dụng các trường trên mệnh đề select hoặc where.Mysql trái tham gia và số tiền

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 

bảng mục;

id 
--- 
1 

bảng thanh toán;

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

bảng thanh toán;

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

Kết quả sẽ là;

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

đầu ra mong muốn của bạn là gì và xin vui lòng gửi một số dữ liệu mẫu? –

+0

Tôi đã cập nhật câu hỏi –

Trả lời

11

Dưới đây là một cách dễ dàng cho kết quả mong muốn của bạn

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

Nếu payment_actions có hai bản ghi, hồ sơ lặp lại trên thanh toán, vì vậy saleAmount = 600. saleAmount nên là 300 –

+0

@MertEmir Tôi đã chỉnh sửa truy vấn bạn có thể kiểm tra –

+0

payment_id là trường id trên bảng thanh toán. không phải bảng mục nào :( –