我有兩個表選擇和與內部連接
Bills
:id amount reference
Transactions
:id reference amount
下面的SQL查詢
SELECT
*,
(SELECT SUM(amount)
FROM transactions
WHERE transactions.reference = bils.reference) AS paid
FROM bills
GROUP BY id HAVING paid<amount
意味着來自表Bills
的某些行,將paid
列添加了關聯交易金額的總和。
但是,它只適用於每個賬單至少有一筆交易。否則,不會返回無交易帳單的行。
可能是因爲我應該做一個內部連接!
所以我嘗試以下方法:
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
然而,這種返回支付所有行相同的值!我究竟做錯了什麼 ?
但是'Bills'中沒有「付費」列,這必須定義爲交易金額的總和。如果我嘗試修改它以糾正這種情況,我仍然只獲得至少有一筆交易的「Bills」行。 – Klaus 2013-02-23 12:28:03
@Klaus:我明白了,那就是你從那裏得到的......如果沒有交易,總和將爲空,所以你需要處理。見上面的代碼。 – Guffa 2013-02-23 12:34:00
非常感謝,'ifnull'(不是'isnull')和左連接做的伎倆! – Klaus 2013-02-23 12:56:17