فرض کنید 3 پایگاه به شکل زیر با ارتباط های مشخص شده داشته باشیم
حال می خواهیم یک دستور SQL بنویسیم که Name1, Name2, Name3 مرتبط با یکدیگر را به ما بدهد
فرض کنید 3 پایگاه به شکل زیر با ارتباط های مشخص شده داشته باشیم
حال می خواهیم یک دستور SQL بنویسیم که Name1, Name2, Name3 مرتبط با یکدیگر را به ما بدهد
یکی از روشهاش :
select T1.Name1,T2.Name2,T3.Name3
from T1,T2,T3
where T1.F1 = T2.F1 and
T1.F1 = T3.F1
ممنون آقای مهدوی عزیز ... ولی این روش نمی تواند کمکی کند ... چرا که در این روش حاصلضرب رکورد ها بدست می اید مثلا اگر 2 رکورد در T1و 3 رکورد در T2 و 2 رکورد در T3 داشته باشیم حداکثر تعداد رکورد ها باید 3 باشد ..اما در جواب شما 10 خواهد بود
من کم کم دارم به این نتیجه می رسم که Sql نمی تواند این مساله را حل کند
سلام
چون نوشته بودی:
برا همین غیرتی شدم یه کد من درآوردی نوشتم...من کم کم دارم به این نتیجه می رسم که Sql نمی تواند این مساله را حل کند
حالا ببین این روش مشکلت رو حل میکنه؟ :roll:
select T1.Name1,T2.Name2,T3.Name3 from T1
join T2 on (T1.Name1=T2.Name2)
join T3 on (T1.Name1=T3.Name3)
SELECT
Name1, Name2, Name3
FROM
T1 INNER JOIN T2 ON T1.F1=T2.F1 INNER JOIN T3 ON T1.F1=T3.F1
با سلام
ممکن است این جواب شما را کمی یاری کند ولی مطمئناً جواب نهایی نیست چونکه جوابهای تکراری در یک جدول را دو بار نمی آورد:
SELECT Name1 from T1,T2,T3
where (T1.F1=T2.F1)and(T1.F1=T3.F1)
union
SELECT Name2 from T1,T2,T3
where (T1.F1=T2.F1)and(T1.F1=T3.F1)
union
SELECT Name3 from T1,T2,T3
where (T1.F1=T2.F1)and(T1.F1=T3.F1)
1) از غیرت شما ممنون (آقای phantasm)
اما دستوری که فرمودید (Join کردن )بی فایده است چرا که همانگونه که در شکل مشاهده می کنید بین جدول 2و3 هیچ ارتباطی نیست
و Joinکردن باعث ایجاد یک رابطه Master/Detailمیگردد که اطلاعات را حتی نمایش نمی دهد
2) آقای vadood شما هم بهمچنین
3) اقای hr110
دستوری که شما فرمودید خوب است اما باعث میگردد که فیلدهای Name1,2,3در یک ستون قرار گیرند که این کار نتیجه را بی فایده می کند
4) شاید من در مورد نتیجه ای میخواهم توضیح نداده ام
نتیجه باید به این شکل باشد
محمد جان
لطفا 3 تا table را بنویس (یعنی مثال بزن) و خروجی مورد علاقه ات را هم بنویس تا بهت بگم چی باید بنویسی
ممنون از توجه شما
فرض کنید محتویات 3 پایگاه به این صورت باشند
حال نتیجه باید به صورت 3 ستون طبق شکل بعدی باشد
سلام
select T1.name1 , T2.name2 ,T3.name3
where T1.F1=T2.F2 and T1.F1=T3.f3
union
select T1.name1 , "" ,T3.name3
where T1.F1<>T2.F2 and T1.F1=T3.f3
union
select T1.name1 , T2.name2 ,""
where T1.F1=T2.F2 and T1.F1<>T3.f3
البته شاید مجبور بشی که این حاصل رو توی یه جدول موقت ذخیره کنی ، ( راهی که برای یک سوال در سایت DBISAM به من گفته شد ) و از اون یه Select Distinct ساده بکنی
baabi عزیز
1) " " در دستور به چه معناست
2) خودم هم دارم به این نتیجه می رسم که با یکبار پردازش نمی توان به این مطلب رسید ..اما تصور آن برایم مشکل است که چگونه با حلقه و یا دستورات متعدد دیگر بخواهم فیلد هایی را که تعدادشان نامشخص است را پر کنم
ببین با این کد حل میشه 8)
SELECT T1.Name1, T1.F1, T2.Name2 Name2, T3.Name3, T2.F1, T2.F2, T3.F1, T3.F3
FROM "t1.db" T1
INNER JOIN "t3.db" T3
ON (T1.F1 = T3.F1)
LEFT OUTER JOIN "t2.DB" T2
ON (T3.F1 = T2.F1)
AND (T3.F3 = T2.F2)
البته به نظر بنده اون ارتباطهایی که در اول کشیده بودید درست نیست
دوست عزیز ...نحوه ارتباط پایگاهها همانگونه که گفتم است
برای اطلاع بیشتر باید بگویم این ساختار سلسله مراتبی است و چیزی که شما بصورت ساده می بینید در واقع 7 طبقه ارتباط می باشد
SELECT
Name1, Name2, Name3
FROM
T3 INNER JOIN T1 ON T1.F1=T3.F1 LEFT JOIN T2 ON T2.F1=T1.F1
شما فیلد های f2 و f3 را بی دلیل گذاشتی. یا نتونستی مساله خودت را درست طرح کنی. این کوثری که من نوشتم خروجی دلخواه شما را بدون استفاده از این دو فیلد می ده. پس
1) این فیلد ها اضافی هستند
2) هنوز نفهمیدم مشکل شما چیه :?:
من فکر می کنم مورد اول درسته و شما تو طراحی table ها مشکل داری.
1) از پاسخ گویی همه شما متشکرم
2) فیلدهای F2,F3بی دلیل نیستند
به این نوع طراحی طراحی سلسله مراتبی می گویند ... برای توضیح بیشتر به مقاله زیر مراجعه کنید
http://www.javan-soft.com/learning115.htm
در قسمت "انواع بانکهای اطلاعاتی "
حسن این نوع پیاده سازی انعطاف بالادر هنگام استفاده از Master /Detailها و Relationبصورت همزمان است
3) حتی با فرض اشکال در طراحی بایستی Sql بایستی بتواند چنین مساله ای را حل کند(چون Sql یک ساختار رابطه ای است )
به هر حال،
چیزی که من نوشتم نیاز شما را بر آورده می کند! نمی کند؟
نه دوست عزیز ...جواب نمی دهد
من فکر میکنم باید یک کمی روش فکر کرد .... سعی میکنم جواب رابدست بیاورم
اگر شما هم یک بار دیگر مرور کنید ممنون می شوم
سلام اقای Javan_Soft
میشه بفرمایید صورت اصلی مسیله چیست؟یعنی در واقعیت فیلد های f1,f2,f3 چیستند و کلید خارجی کدام است؟