نمایش نتایج 1 تا 20 از 20

نام تاپیک: (فوری) ارتباط و گزارش

  1. #1

    (فوری) ارتباط و گزارش

    فرض کنید 3 پایگاه به شکل زیر با ارتباط های مشخص شده داشته باشیم


    حال می خواهیم یک دستور SQL بنویسیم که Name1, Name2, Name3 مرتبط با یکدیگر را به ما بدهد

  2. #2
    کاربر دائمی آواتار Mahdavi
    تاریخ عضویت
    فروردین 1382
    محل زندگی
    ایران - میگن تهرون
    پست
    606
    یکی از روشهاش :

    select T1.Name1,T2.Name2,T3.Name3
    from T1,T2,T3
    where T1.F1 = T2.F1 and
    T1.F1 = T3.F1

  3. #3
    ممنون آقای مهدوی عزیز ... ولی این روش نمی تواند کمکی کند ... چرا که در این روش حاصلضرب رکورد ها بدست می اید مثلا اگر 2 رکورد در T1و 3 رکورد در T2 و 2 رکورد در T3 داشته باشیم حداکثر تعداد رکورد ها باید 3 باشد ..اما در جواب شما 10 خواهد بود

    من کم کم دارم به این نتیجه می رسم که Sql نمی تواند این مساله را حل کند

  4. #4
    سلام
    چون نوشته بودی:
    من کم کم دارم به این نتیجه می رسم که 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)

  5. #5
    کاربر دائمی آواتار vadood
    تاریخ عضویت
    فروردین 1382
    محل زندگی
    تهران
    پست
    858
    حل شد یا نه؟

  6. #6
    کاربر دائمی آواتار vadood
    تاریخ عضویت
    فروردین 1382
    محل زندگی
    تهران
    پست
    858
    SELECT
    Name1, Name2, Name3
    FROM
    T1 INNER JOIN T2 ON T1.F1=T2.F1 INNER JOIN T3 ON T1.F1=T3.F1

  7. #7
    VIP آواتار hr110
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    ایران - تهران
    پست
    1,460
    با سلام
    ممکن است این جواب شما را کمی یاری کند ولی مطمئناً جواب نهایی نیست چونکه جوابهای تکراری در یک جدول را دو بار نمی آورد:

    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)

  8. #8
    1) از غیرت شما ممنون (آقای phantasm)
    اما دستوری که فرمودید (Join کردن )بی فایده است چرا که همانگونه که در شکل مشاهده می کنید بین جدول 2و3 هیچ ارتباطی نیست
    و Joinکردن باعث ایجاد یک رابطه Master/Detailمیگردد که اطلاعات را حتی نمایش نمی دهد

    2) آقای vadood شما هم بهمچنین

    3) اقای hr110
    دستوری که شما فرمودید خوب است اما باعث میگردد که فیلدهای Name1,2,3در یک ستون قرار گیرند که این کار نتیجه را بی فایده می کند

    4) شاید من در مورد نتیجه ای میخواهم توضیح نداده ام

    نتیجه باید به این شکل باشد

  9. #9
    کاربر دائمی آواتار vadood
    تاریخ عضویت
    فروردین 1382
    محل زندگی
    تهران
    پست
    858
    محمد جان
    لطفا 3 تا table را بنویس (یعنی مثال بزن) و خروجی مورد علاقه ات را هم بنویس تا بهت بگم چی باید بنویسی

  10. #10
    ممنون از توجه شما

    فرض کنید محتویات 3 پایگاه به این صورت باشند

    حال نتیجه باید به صورت 3 ستون طبق شکل بعدی باشد

  11. #11
    کسی نظری نداره؟ :?

  12. #12
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    بندرعباس ص پ 3769-79145
    پست
    149
    سلام

    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 ساده بکنی

  13. #13
    baabi عزیز
    1) " " در دستور به چه معناست
    2) خودم هم دارم به این نتیجه می رسم که با یکبار پردازش نمی توان به این مطلب رسید ..اما تصور آن برایم مشکل است که چگونه با حلقه و یا دستورات متعدد دیگر بخواهم فیلد هایی را که تعدادشان نامشخص است را پر کنم

  14. #14
    ببین با این کد حل میشه 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)
    البته به نظر بنده اون ارتباطهایی که در اول کشیده بودید درست نیست

  15. #15
    دوست عزیز ...نحوه ارتباط پایگاهها همانگونه که گفتم است
    برای اطلاع بیشتر باید بگویم این ساختار سلسله مراتبی است و چیزی که شما بصورت ساده می بینید در واقع 7 طبقه ارتباط می باشد

  16. #16
    کاربر دائمی آواتار vadood
    تاریخ عضویت
    فروردین 1382
    محل زندگی
    تهران
    پست
    858

    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 ها مشکل داری.

  17. #17
    1) از پاسخ گویی همه شما متشکرم
    2) فیلدهای F2,F3بی دلیل نیستند
    به این نوع طراحی طراحی سلسله مراتبی می گویند ... برای توضیح بیشتر به مقاله زیر مراجعه کنید

    http://www.javan-soft.com/learning115.htm

    در قسمت "انواع بانکهای اطلاعاتی "
    حسن این نوع پیاده سازی انعطاف بالادر هنگام استفاده از Master /Detailها و Relationبصورت همزمان است

    3) حتی با فرض اشکال در طراحی بایستی Sql بایستی بتواند چنین مساله ای را حل کند(چون Sql یک ساختار رابطه ای است )

  18. #18
    کاربر دائمی آواتار vadood
    تاریخ عضویت
    فروردین 1382
    محل زندگی
    تهران
    پست
    858
    به هر حال،

    چیزی که من نوشتم نیاز شما را بر آورده می کند! نمی کند؟

  19. #19
    نه دوست عزیز ...جواب نمی دهد
    من فکر میکنم باید یک کمی روش فکر کرد .... سعی میکنم جواب رابدست بیاورم
    اگر شما هم یک بار دیگر مرور کنید ممنون می شوم

  20. #20
    سلام اقای Javan_Soft

    میشه بفرمایید صورت اصلی مسیله چیست؟یعنی در واقعیت فیلد های f1,f2,f3 چیستند و کلید خارجی کدام است؟

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •