PDA

View Full Version : بازیابی اطلاعات به صورت پیچیده



resident
دوشنبه 22 بهمن 1386, 18:45 عصر
سلام.
فرض کنید سه تا جدول به نامهای A و B و C داریم:

A B C
--- ---- -----
a1 b1 c1
a2 a1(F.K) c2
c1(F.K) c1
... ... ...

a1,b1,c1 جدولها هستند.
فرض کنید a2 هم کلید خارجی است(مربوط به جدول دیگه)
حالا میخوام کوئری بنویسم که کلیه رکوردهای جدول A که مربوط به کلید خارجی a2 است به همراه رکوردهایی از جدول B که مربوط به a1 است و مقادیر مربوطه از جدول C را بازیابی کنم.


لازم به ذکر است که هر رکورد از جدول A با n رکورد از جدول B در ارتباط است.
رکوردهای مربوط به کلید خارجی a2 در جدول A نیز n تاست.


ممنون میشم راهنماییم کنید.

resident
دوشنبه 22 بهمن 1386, 21:27 عصر
خواهش می کنم راهنماییم کنید.
متشکرم.

حمیدرضاصادقیان
دوشنبه 22 بهمن 1386, 22:14 عصر
سلام.شما باید بین جداولتون از join استفاده کنید.


select a.* ,b.*,c.* from table1 as a inner join table2 as b
ob a.id=b.id inner join table3 as c on a.id=c.id

این کدی که نوشتم رکوردها رو بازیابی میکنه از 3 جدول که id های آنها باهم برابر باشه.
اینو میتونی روی جداول خودت تعمیم بدی.

resident
دوشنبه 22 بهمن 1386, 22:28 عصر
سلام.شما باید بین جداولتون از join استفاده کنید.


select a.* ,b.*,c.* from table1 as a inner join table2 as b
ob a.id=b.id inner join table3 as c on a.id=c.id

این کدی که نوشتم رکوردها رو بازیابی میکنه از 3 جدول که id های آنها باهم برابر باشه.
اینو میتونی روی جداول خودت تعمیم بدی.

جناب صادقیان ممنون از اینکه لطف کردید جواب دادید.
کددی که شما نوشتید الحاق معمولی روی سه جدول است. اما با توجه به توضیحاتی که بنده دربالا دادم مشکلم با این کوئری که شما نوشتید حل نماصلا شزایط مسئله فرق می کنه.

حمیدرضاصادقیان
دوشنبه 22 بهمن 1386, 23:15 عصر
سه جدول شما به چه فیلدهایی به هم ربط دارند؟ باید از طریق یک کلید باشه درسته؟
یعنی در جدول a اگر فرض کنیم جدول اصلی شماست با جدول b,c که احتمالا زیر مجموعه جدول a هستند براساس یک کلید باهم ارتباط دارند. درسته؟
اگر به این شکل هست کدی که نوشتم باید مشکل شما رو حل کنه.
اگر اینطوری نیست بتونید بیشتر توضیح بدید بهتره.

resident
سه شنبه 23 بهمن 1386, 07:39 صبح
من مجددا امتحان کردم جواب نداد.
میدونید چرا جواب نمیده؟ چون در جدولA نمیخوام رکوردها رو بر اساس کلید اصلی برام برگردونه. میخوام رکوردها رو بر اساس کلید خارجی برگردونم که تعدادشان n رکورد است. حالا هر یک از این رکوردها ، خودشون با nرکورد از جدول B ارتباط دارن.
با اون کدی که شما نوشتید فقط یک رکورد از جدول A به همراه رکوردهای مرتبط از جدول B نشون داده میشن. اما من میخوام کلیه رکوردها از جدول A در خروجی باشند

Elham_gh
سه شنبه 23 بهمن 1386, 10:04 صبح
من مجددا امتحان کردم جواب نداد.
میدونید چرا جواب نمیده؟ چون در جدولA نمیخوام رکوردها رو بر اساس کلید اصلی برام برگردونه. میخوام رکوردها رو بر اساس کلید خارجی برگردونم که تعدادشان n رکورد است. حالا هر یک از این رکوردها ، خودشون با nرکورد از جدول B ارتباط دارن.
با اون کدی که شما نوشتید فقط یک رکورد از جدول A به همراه رکوردهای مرتبط از جدول B نشون داده میشن. اما من میخوام کلیه رکوردها از جدول A در خروجی باشند

سواتونو خیلی گنگ مطرح کردید.
اگر A دارای فیلدهای a1,a2 باشد , B دارای b1,b2,a2 که a2 در B کلید باشد و در A کلید خارجی:


SELECT A.*,B.*
FROM A RIGHT OUTER JOIN B ON A.a2=B.a2