PDA

View Full Version : سوال: ترکیب کردن دو جدول



hashemi.hanieh
سه شنبه 29 مرداد 1392, 23:13 عصر
سلام دوستان
من یه سوال ساده دارم که میدونم خیلیا جوابشو میدونن... ممنون میشم کمکم کنین
ما دو تا جدول داریم، که این دو جدول فیلد مشترکی با نام ماده اولیه دارن نکته اینه که رکوردهای مربوط به فیلد نام ماده اولیه در دو جدول لزوما یکسان نیس، برخی مشترک و برخی غیر مشترک
و بنا به دلایل خاص باید این دو تا جدول جدا از هم باشن تا داده ها به تفکیک وارد بشن
حالا من میخوام یه کوئری ایجاد کنم که همه فیلدهای دو جدول رو در کنار هم قرار بده به طوری که در فیلد مشترک نام ماده اولیه "همه" مواد نشان داده شود و رکوردهای مربوط به آن در جلویش نشان داده شود
نکته آخر اینکه فیلدهای دو جدول با هم یکسان نیس و فقط یه فیلد مشترک دارن
پ.ن: اگر دو فیلد را به هم ارتباط دهم و کوئری بگیرم فقط رکوردهای مشترک نمایش داده میشه
شکل نهایی چیزی که من میخوام به شکل زیره:
http://www.8pic.ir/images/98823262410638668922.png
سپاسگزار میشم اگر لطف کنید و پاسخ بدین

saeed1234n
چهارشنبه 30 مرداد 1392, 16:10 عصر
با سلام
دوست عزيز
يك راه آن استفاده از گزاره SQL زير در محيط SQL كوئري ميباشد .


SELECT Tbl1.NameFirstPeriod, Tbl1.QuantityFirstPeriod, Tbl2.QuantityBuy
FROM Tbl1 LEFT JOIN Tbl2 ON Tbl1.NameFirstPeriod=Tbl2.NameFirstPeriod;

master13111
چهارشنبه 30 مرداد 1392, 22:26 عصر
البته متاسفانه اکسس مث اسکیوال فانکشن full outer join رو نداره. اما میشه از کوئری زیر برای گرفتن نتیجه ای که فرموده بودین استفاده کرد

SELECT IngredientFirstPeriodTbl1.NameFirstPeriod, QuantityFirstPeriod , iif(IngredientBuyTbl2.QuantityBuy>0, IngredientBuyTbl2.QuantityBuy,0) as QuantityBuy
FROM IngredientFirstPeriodTbl1 LEFT JOIN IngredientBuyTbl2 ON IngredientFirstPeriodTbl1.NameFirstPeriod = IngredientBuyTbl2.NameFirstPeriod
UNION SELECT IngredientBuyTbl2.NameFirstPeriod,'0', IngredientBuyTbl2.QuantityBuy
FROM IngredientBuyTbl2
WHERE (((IngredientBuyTbl2.NameFirstPeriod) Not In (select NameFirstPeriod from IngredientFirstPeriodTbl1)));



اول همونطور که دوستمون فرمودن یه کوئری با left jion گرفتم. مضاف بر اینکه با استفاده از دستور iif مقادیر خالی رو با صفر جایگزین کردم
بعدش یه کوئری دیگه هم گرفتم که از جدول سمت راستی اون رکوردایی رو که تو جدول سمت چپ وجود نداشت (در واقع در کوئری بالا نبودن) رو برمیگردوند به همراه یه ستون اضافه با مقدار صفر
و در آخر سر هم این دو تا کوئری رو با union ترکیب کردم

hashemi.hanieh
پنج شنبه 31 مرداد 1392, 09:24 صبح
سلام
من واقعا از شما سپاسگزارم که اینقدر با حوصله به سوالات پاسخ میدین
من این کد رو اجرا کردم اما مشکل اینجاس که محصول روغن که در تیبل 2 هست و در تیبل 1 نیس در کوئری نمایش داده نمیشه (فایل join2)
من دو راه به ذهنم رسید :
1- استفاده از دستور رایت به صورت مشابه (به طوری که کوئری LEFT به صورت Make Table و کوئری RIGHT به صورت Append باشد) این در نهایت منجر به ترکیب دو جدول میشه که یه سری داده تکراری ایجاد میشه که باید به یه نوعی حذفشون کنیم :افسرده: این راه به نظرم اصلا خوب نیس چون من برای گزارش نهایی مجبورم دو تا کوئری ران کنم (فایل JOIN3)
2- دستور FULL OUTER JOIN که گویا اکسس از اون پشتیبانی نمیکنه

شما چه پیشنهادی دارین؟
ممنون میشم مجددا راهنمایی کنید


109504
109503

hashemi.hanieh
پنج شنبه 31 مرداد 1392, 09:33 صبح
من به یه نکته ای اشاره کنم من قبل از اینکه نقل قول دوست خوبم master13111 رو ببینم انقل قول قبلی رو نوشتم
واسه همین حذفش نکردم
همین جا از master13111 تشکر می کنم واقعا خیلی خیلی عالی بود
من کد ایشون رو اجرا کردم و فایل نهایی رو قرار میدم تا همه بتونن ازش استفاده کنن

hashemi.hanieh
پنج شنبه 31 مرداد 1392, 11:03 صبح
ببخشید فقط امکانش هست این خط رو برام توضیح بدین؟ چون من تو اس کیو ال خیلی مبتدیم


SELECT IngredientBuyTbl2.NameFirstPeriod,'0', IngredientBuyTbl2.QuantityBuy
FROM IngredientBuyTbl2
'0' تو کد بالا چی کار میکنه؟

master13111
پنج شنبه 31 مرداد 1392, 14:30 عصر
جدول IngredientBuyTbl2 دو ستون داره که شامل نام کالا و خرید طی دوره س. از اونجایی که کوئری دوم کالاهایی رو برمیگردونه که موجودی اولیه ندارن, پس با استفاده از '0' یه ستون با مقدار صفر برای فیلد "موجودی اولیه" ایجاد کردم

hashemi.hanieh
یک شنبه 03 شهریور 1392, 17:17 عصر
دوست عزیز master13111

راهنمایی شما برای من بسیار بسیار کارآمد بود.... الان به یه مشکلی بر خوردم:( و اون اینکه اگر تعداد جداول 3 تا باشه... چطور باید این کد رو جایگزین کنم؟ چندین کد اجرا کردم اما نشد... چون من خیلی در اس کیو ال مبتدی هستم... ممنون میشم اگر مجددا لطف کنید و راهنمایی کنید
مجددا سپاسگزارم