Tôi có hai bảngChọn sum và bên tham gia
Bills
:id amount reference
Transactions
:id reference amount
Truy vấn SQL sau
SELECT
*,
(SELECT SUM(amount)
FROM transactions
WHERE transactions.reference = bils.reference) AS paid
FROM bills
GROUP BY id HAVING paid<amount
có nghĩa là một số hàng từ bảng Bills
, thêm cột paid
với tổng số tiền của các giao dịch có liên quan.
Tuy nhiên, nó chỉ hoạt động khi có ít nhất một giao dịch cho mỗi hóa đơn. Nếu không, không có dòng nào cho một hóa đơn ít giao dịch được trả về.
Có lẽ, đó là vì tôi nên tham gia vào bên trong!
Vì vậy, tôi thử như sau:
SELECT
*,
(SELECT SUM(transactions.amount)
FROM transactions
INNER JOIN bills ON transactions.reference = bills.reference) AS paid
FROM bills
GROUP BY id
HAVING paid < amount
Tuy nhiên, điều này trả về giá trị cùng trả tiền cho tất cả các hàng! Tôi đang làm gì sai?
Nhưng không có cột "trả tiền" trong 'Hóa đơn', điều này phải được xác định là tổng số tiền của giao dịch.Nếu tôi cố sửa đổi nó để sửa nó, tôi vẫn chỉ nhận được hàng 'Bills' với ít nhất một giao dịch. – Klaus
@Klaus: Tôi hiểu, đó là nơi bạn có được từ ... Số tiền sẽ là null nếu không có giao dịch, vì vậy bạn sẽ cần phải xử lý điều đó. Xem mã ở trên. – Guffa
Cảm ơn rất nhiều, các 'ifnull' (không' isnull') và trái tham gia đã làm các trick! – Klaus