Join - مغایرت گیری
با سلام
من دو تا جدول دارم که یکی صورتحساب بانکی بنام Sorat هست و دیگری دفاترم بنام Daftar حال میخوام بین این دو مغایرت گیری کنم و واریزی هایی که به بانک انجام شده ولی هنوز در دفاتر ثبت نشده است را پیدا کنم.
Table Sorat
bes | bed | date |
2000 | 0 | 99/03/01 |
5000 | 0 | 99/03/01 |
5000 | 0 | 99/03/01 |
Table Daftar
credit | debit | Sanad_date |
2000 | 0 | 99/03/01 |
5000 | 0 | 99/03/01 |
حال باتوجه به نمونه بالا مشاهده میشود که یکی از واریزی ها به مبلغ 5 هزار در دفاتر ثبت نگشته است حال من چطور میتوانم این مغایرت را پیدا کنم؟
یعنی من میخوام یه گزارشی درست کنم که به من بگوید یک واریزی در تاریخ یکم خرداد ماه 99 در دفاتر ثبت نشده است.
5 پاسخ
خب دلیل اصلیش اینه که شما کلید مناسبی رو برای مقایسه انتخاب نکرده اید . مبلغ همیشه می تونه تکراری باشه. تو این مورد مثلا باید شماره تراکنش داشته باشید تا مطمئن بشید گزارش ها درست هستند.
از count استفاده کنید و تعداد هر میلغ در روز رو بگیرید و مقایسه کنید.
ولی برای مقایسه دقیق یه فیلد Id مناسب لازم دارید که اینجا نیست.
باتوجه به اینکه در دفاتر یکبار مبلغ 5 هزار ثبت شده است دستور except مبلغ 5 هزار را نشان نمیدهد
خب شماره گزارشی وجود نداره و من هم فقط میخوام به من گزارشی بده که فقط بدونم یکی از واریزی های 5 هزار ریالیم هنوز در دفاتر ثبت نگشته است
سلام به شما دوست عزیز.
از عملیات except استفاده کنید.
مثل دستور زیر
select bes as amount, date from sorat
except
select credit as anount , sanad_date as date from daftar