اذهب إلى المحتوى
  • 0

كيفية حل مشكلة تكرار الناتج عند الاستعلام من علاقة ربط بين عدة جداول MYSQL JOIN multiple tables

محمد المصري12

السؤال

الاستعلام كالتالي 

SELECT
order_threads.*,
       thread.image ,
       thread.name,
       patron.id AS patronID,
       patron.order_id AS patronOrderID,
       patron_colors.patron_id AS patron_colors_Patron_id ,
       patron_colors.color_name AS patron_colors_color_name,
       patron_colors.id AS patron_colors_ID,
       patron_colors.color_count AS patron_colors_colorCount

FROM order_threads

    JOIN thread 
      
ON order_threads.thread_id = thread.id

JOIN patron_colors ON patron_colors.patron_id = order_threads.color_select OR patron_colors.color_name = order_threads.color_select

LEFT JOIN patron ON patron.id = patron_colors.patron_id 

WHERE patron.order_id = order_threads.order_id AND  order_threads.order_id='36';

و الناتج كما في الصورة

لاحظ ID رقم 72 مكرر مرتين

و 73 ايضا

1.thumb.jpg.52e622999420cf8d6cfad2065c696a94.jpg

 

مع العلم اني لما بستعلم من جدول واحد بدون بناء علاقات مع جداول اخرى الناتج بيطلع مضبوط

2.thumb.jpg.c69139c6b554a010ac8f6c36bc72e962.jpg

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

تلك المشكلة تحدث بسبب علاقة الجوين كما أوضح أ.وائل ويمكنك حلها أيضًا عبر إستخدام group by لحقل يُمثل السجل مثل ال id لتكون في النهاية الجملة الإستعلامية الخاصة بك كالتالي 

SELECT
order_threads.*,
       thread.image ,
       thread.name,
       patron.id AS patronID,
       patron.order_id AS patronOrderID,
       patron_colors.patron_id AS patron_colors_Patron_id ,
       patron_colors.color_name AS patron_colors_color_name,
       patron_colors.id AS patron_colors_ID,
       patron_colors.color_count AS patron_colors_colorCount

FROM order_threads

    JOIN thread 
      
ON order_threads.thread_id = thread.id

JOIN patron_colors ON patron_colors.patron_id = order_threads.color_select OR patron_colors.color_name = order_threads.color_select

LEFT JOIN patron ON patron.id = patron_colors.patron_id 

WHERE patron.order_id = order_threads.order_id AND  order_threads.order_id='36';
group by id

 

تم التعديل في بواسطة شرف الدين2
تحسين الاجابة
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

تم جلب الفاتورة مرتين لأن علاقة الربط JOIN تقوم بجلب جميع الثنائيات التي تحقق علاقة الربط.

إذاً لديك تكرار في الجدول الذي يمثل الجزء الأيمن من علاقة الربط.

  • ملاحظة: ترتيب ذكر الجداول في علاقة الدمج مهم

يمكن حل المشكلة بإضافة select distinct لمنع تكرار النتائج المتطابقة

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...