Bir Sql Sorgu Hatası
-
Merhaba mürit ve müridelerim.
Elimde şu şekilde bir şema yapısı var
-- borrowed from https://stackoverflow.com/q/7745609/808921 CREATE TABLE IF NOT EXISTS `wallets` ( `wallet_id` int(6) unsigned NOT NULL, `wallet` int(3) unsigned NOT NULL, PRIMARY KEY (`wallet_id`) ) DEFAULT CHARSET=utf8; INSERT INTO `wallets` (`wallet_id`, `wallet`) VALUES ('1', '100'), ('2', '100'); CREATE TABLE IF NOT EXISTS `totals` ( `id` int(6) unsigned NOT NULL, `TotalID` int(6) unsigned NOT NULL, `wallet_id` int(6) unsigned NOT NULL, `total` int(3) unsigned NOT NULL, PRIMARY KEY (`id`) ) DEFAULT CHARSET=utf8; INSERT INTO `totals` (`id`, `TotalID`,`wallet_id`,`total`) VALUES ('1', '19','1', '250'), ('2', '19','1', '750'); UPDATE wallets inner join totals on totals.wallet_id=wallets.wallet_id SET wallets.wallet=wallets.wallet+totals.total Where totals.TotalID=19
Bu durumda wallet_id 1 olan sütunun wallet değeri 1100 olması gerekirken 350 oluyor. Buradaki hata nedir ? Normalde 1100 olması gerekiyor.
Select sorgusu şu şekilde çünkü 2 satır değer döndürüyor.
SELECT * from wallets inner join totals on totals.wallet_id=wallets.wallet_id
SQL FİDDLE : http://sqlfiddle.com/#!9/88436e/1/0
-
one-to-many oldugu icin onun ustunden join yapip bir sey eslestirmeye calisirsan mysql keyfine kalmis. direk boyle yazmak yerine iceriden sum alip onu unique row ile match et.
update wallets inner join ( select wallet_id, sum(total) total_sum from totals where totals.TotalID = 19 group by wallet_id ) totals on totals.wallet_id = wallets.wallet_id set wallets.wallet = wallets.wallet + totals.total_sum;