خب ببینید اون روشی که اول گفتم و شما بکار بردید اینطور بود که وقتی شما پیوند بین جداول بدهی و دانشجو رو انجام میدادید بعدش میومد با جدول پرداختی پیوند تشکیل میداد که در اینصورت هر رکورد حاصل از پیوند اول با جدول سوم ادغام میشد واسه همون هر پرداختی چند بار نشون داده میشد و در جمع مشکل ایجاد میکرد.
من اومدم توی روش دوم دو تا پیوند جدا رو در نظر گرفتم. یکی پیوند بین جدول دانشجو و بدهی و دومی پیوند بین جدول دانشجو و پرداختی. حالا باید این دو جدول جدا رو که جداگانه پیوند دادیم بوسیله یه پیوند دیگه که نقطه مشترکشون ID دانشجو هست بهم ربط بدیم. البته این روشی هست که من استفاده کردم و شاید یکم گیج کننده باشده. حالا اگه کس دیگه از دوستان می تونن راهنمایی کنن خوشحال میشیم یاد بگیریم.
برای مثال من اولین پیوند رو که بین جداول دانشجو بدهی است اینجوری دارم:
SELECT Daneshjoo.ID, Daneshjoo.name, SUM(Bedehi.Mablagh) as Bedehi
FROM Daneshjoo LEFT JOIN Bedehi on Daneshjoo.ID = Bedehi.ID
GROUP BY Daneshjoo.ID, Daneshjoo.name
و خروجی این دستور میشه ID و نام دانشجو و جمع بدهی هر دانشجو:
حالا دومین پیوند بین جدول دانشجو پرداختی:
SELECT Daneshjoo.ID, Daneshjoo.name, SUM(Pardakhti.Mablagh) as Padakhti
FROM Daneshjoo LEFT JOIN Pardakhti on Daneshjoo.ID = Pardakhti.ID
GROUP BY Daneshjoo.ID, Daneshjoo.name
و خروجی رو به اینصورت داریم:
حالا این دستور رو ببینید:
SELECT *
FROM (
SELECT Daneshjoo.ID, Daneshjoo.name, SUM(Bedehi.Mablagh) as Bedehi
FROM Daneshjoo LEFT JOIN Bedehi on Daneshjoo.ID = Bedehi.ID
GROUP BY Daneshjoo.ID, Daneshjoo.name) as t1
LEFT JOIN
(SELECT Daneshjoo.ID, Daneshjoo.name, SUM(Pardakhti.Mablagh) as Padakhti
FROM Daneshjoo LEFT JOIN Pardakhti on Daneshjoo.ID = Pardakhti.ID
GROUP BY Daneshjoo.ID, Daneshjoo.name) as t2
on t1.ID = t2.ID
اومدم تمام ستون های حاصل از پیوند این دو تا پیوند جداگانه رو select کردم. t1 جدول حاصل از پیوند اوله و t2 جدول حاصل از پیوند دوم. ببینید نتیجه چی میشه؟!
حالا من باید فقط ستون های ID، نام دانشجو و جمع بدهی ها و پرداختی ها را نشون بدم.
پس میام بجای SELECT * از Select زیر استفاده میکنیم:
SELECT t1.ID, t1.name, Bedehi, Padakhti
FROM (
SELECT Daneshjoo.ID, Daneshjoo.name, SUM(Bedehi.Mablagh) as Bedehi
FROM Daneshjoo LEFT JOIN Bedehi on Daneshjoo.ID = Bedehi.ID
GROUP BY Daneshjoo.ID, Daneshjoo.name) as t1
LEFT JOIN
(SELECT Daneshjoo.ID, Daneshjoo.name, SUM(Pardakhti.Mablagh) as Padakhti
FROM Daneshjoo LEFT JOIN Pardakhti on Daneshjoo.ID = Pardakhti.ID
GROUP BY Daneshjoo.ID, Daneshjoo.name) as t2
on t1.ID = t2.ID
توجه کنین که Bedehi و Pardakhti که در سطر اول این دستور اومدن همون حاصل جمع بدهی ها و پرداختی هاست که ما توی پیوند های داخلی نامدهی کردیم.
SUM(Bedehi.Mablagh) as Bedehi و SUM(Pardakhti.Mablagh) as Padakhti منظورمه!!
الان این باید جواب بده. البته من توی sql چک کردم.