PDA

View Full Version : تلفیق افقی 3 جدول



yosefi1988
سه شنبه 22 اسفند 1391, 23:11 عصر
لطفا کمک ....! قبل از هه این تصویر رو ببینید: http://yosefi1988.persiangig.com/image/mail/426517_218660084943164_685035952_n.jpg میخوام 2 تا جدول بالا رو به شکل پایینی ترکیب کنم اونایی که با SQL کار کردن لطفا کمک کنن فیلد ID مشترک هست بین جدول ها مرسی از همه

website.expert
سه شنبه 22 اسفند 1391, 23:47 عصر
سلام دوست عزیز،
اگه اسم table هاتون به ترتیب از چپ به راست t1 تا t3 باشه،
میتونید از دستورات زیر استاده کنید:
SELECT t1.id, t1.s, t2.t, t3.a
FROM t1
JOIN t2 ON t2.id = t1.id
JOIN t3 ON t3.id = t2.id

yosefi1988
چهارشنبه 23 اسفند 1391, 09:32 صبح
واقعا دستت درد نکنه عالییییییییییی بود یه سوال دیگه: اگه جدول T2 که میشه جدول وسطی توی عکس به جای 3 تا رکورد یک رکورد کمتر داشته باشه (یعنی 2 تا رکورد داشته باشه) اونوقت خروجیمون میشه 2 رکورده ..... چرا؟ من نمیخوام این طور بشه باید همون 3 تا رکورد رو داشته باشه ولی به جای اون یه رکوردی که جدول t2 کم داره 0 بزاره.....

veniz2008
چهارشنبه 23 اسفند 1391, 09:48 صبح
واقعا دستت درد نکنه عالییییییییییی بود یه سوال دیگه: اگه جدول T2 که میشه جدول وسطی توی عکس به جای 3 تا رکورد یک رکورد کمتر داشته باشه (یعنی 2 تا رکورد داشته باشه) اونوقت خروجیمون میشه 2 رکورده ..... چرا؟ من نمیخوام این طور بشه باید همون 3 تا رکورد رو داشته باشه ولی به جای اون یه رکوردی که جدول t2 کم داره 0 بزاره.....
سلام.
وقتی از کلمه join استفاده میشه دنبال ستون مشترک برای ادغام رکوردها میگرده حالا اگه یه سطر رو حذف کنی (مثلا id = 3 از جدول وسطی) جدول اولی که id = 3 داره نمیتونه معادل خودش رو در جدول وسط پیدا کنه واسه همین دو رکورد برگشت داده میشه. واسه حل مشکلتون میتونید از left join استفاده کنید :

SELECT t1.id, t1.s, t2.t, t3.a
FROM t1
Left JOIN t2 ON t2.id = t1.id
JOIN t3 ON t3.id = t1.id
Left Join ( یا Left Outer Join ) : تمام سطرهای جدول چپ را برمیگرداند حتی اگر نظیرش در جدول راست نباشه.
Right Join ( یا Right Outer Join ) : تمام سطرهای جدول راست را برمیگرداند حتی اگر نظیرش در جدول چپ نباشه.

yosefi1988
چهارشنبه 23 اسفند 1391, 11:19 صبح
داداش واقعا دمت گرم توضیحات خوب بود..... با کمی تغییر در کد ها به ئتیجه دلخواهم رسیدم کدی که زدم اینه : select * from (SELECT t1.id, t1.s, t2.t--, t3.a FROM t1 left JOIN t2 ON t1.id = t2.id)as aa join t3 on t3.id=aa.id

website.expert
چهارشنبه 23 اسفند 1391, 11:52 صبح
داداش واقعا دمت گرم توضیحات خوب بود..... با کمی تغییر در کد ها به ئتیجه دلخواهم رسیدم کدی که زدم اینه : select * from (SELECT t1.id, t1.s, t2.t--, t3.a FROM t1 left JOIN t2 ON t1.id = t2.id)as aa join t3 on t3.id=aa.id
دوست عزیز حالتی که شما نوشتی بهینه نیست،
فکر کنم اینجوری هم اگه بنویسید به نتیجه دلخواه می رسید:
SELECT t1.id, t1.s, t2.t, t3.a FROM t1
LEFT JOIN t2 ON t2.id = t1.id
JOIN t3 ON t3.id = t1.id