2016-03-23 19 views
0

Sütun içeren bir tablom var: borç, kredi, debit_balance, credit_balance ve miktar. Borç ve kredi her biri belirli hesaplarla ilgilidir.mysql: bir satırın diğer iki satır değerine göre çalıştırılması

Her yeni satır eklediğimde, debit_balance ve credit_balance öğesinin hesabın önceki bakiyesine göre atanmasını istiyorum. Otomatik ödeme hesabı, kredi 's hesabı 1'dir

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') 

3, ve ben değiştirmek istiyorum miktar ı sorguyu çalıştırdığınızda, MySQL bana Every derived table must have its own alias hata veriyor 5.

olduğunu.

+0

Ne istediğinizi yapmayan sorgu hakkında ne var? – VoteyDisciple

+0

Bir "Her türetimli tablonun kendi takma adı olması gerekir" hatası alıyorum, ancak sorguları bir değer atama konumunda çalıştırıyorum, bunun daha mantıklı olacağı bir birleştirmeye karşı. – user2044299

+0

Bu şema, probleminizin bir parçası olan süper tuhaf görünüyor. Gerçek bir muhasebe tablosunda "denge" sütunu yoktur, bakiye sadece eksi borçların toplamıdır. Defterinizin referanslarına takma adlar eklemeyi denediniz mi? Örneğin AS ledger_a '. – tadman

cevap

1

Eklenecek değerleri sağlamak için tek bir SELECT sorgu kullanabilirsiniz.

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

tBu tamamen işe yaradı! Yaklaşmaya çalışıyorum ama SO izin vermiyor. Sağol Barmar! – user2044299

+0

Oy vermek için daha fazla itibara ihtiyacınız var. Sorunu çözdüğünü belirtmek için onay işaretini tıklayarak cevabı kabul et. – Barmar

+0

Teşekkürler, burada rehberlik için teşekkür ederiz! – user2044299

İlgili konular