2016-03-23 26 views
0

我有一個列表:借方,貸方,借方餘額,貸方餘額和金額。借記卡和信用卡都屬於特定賬戶。mysql:運行基於另外兩行的插入值

每次我添加一個新行時,我都希望根據賬戶以前的餘額分配debit_balance和credit_balance。

INSERT INTO `ledger` (`debit`, `credit`, `debit_balance`, `credit_balance`, `amount`) 
VALUES ('1', '3', 
(SELECT debit_balance FROM `ledger` WHERE `debit` = '1' ORDER BY `id` DESC LIMIT 0,1) + 5, 
(SELECT credit_balance FROM `ledger` WHERE `credit` = '3' ORDER BY `id` DESC LIMIT 0,1) + 5, 
'5') 

凡借記賬戶是1,信用賬戶爲3,我想換量是5

當我運行查詢,MySQL的給我一個Every derived table must have its own alias錯誤。

+0

這是什麼關於那個沒有做你想做的查詢? – VoteyDisciple

+0

我得到一個'每個派生表都必須有自己的別名'錯誤,但我在值賦值位置運行查詢,而對於更有意義的連接。 – user2044299

+0

該架構看起來超級奇怪,這可能是您的問題的一部分。真正的分類賬表中沒有「餘額」欄,餘額僅僅是信用額減去借方的總和。你有沒有嘗試添加別名到你的'分類帳'參考?例如,「AS ledger_a」。 – tadman

回答

1

您可以使用單個SELECT查詢來提供要插入的值。

INSERT INTO ledger (debit, credit, debit_balance, credit_balance, amount) 
SELECT 1, 3, l1.debit_balance + 5, l2.credit_balance + 5, 5 
FROM (SELECT MAX(id) AS debit_id FROM ledger WHERE debit = 1) AS maxd 
JOIN ledger AS l1 ON l1.id = maxd.debit_id 
CROSS JOIN (SELECT MAX(id) AS credit_id FROM ledger WHERE credit = 3) AS maxc 
JOIN ledger AS l2 ON l2.id = maxc.credit_id 
+0

tThis完全工作!試圖upvote,但SO不會讓我。謝謝,巴爾馬! – user2044299

+0

您需要更多信譽才能投票。只需點擊複選標記接受答案,以表明它解決了問題。 – Barmar

+0

謝謝,感謝這裏的指導! – user2044299