MySQL انضم إلى أربعة جداول مع اثنين من الجداول الرئيسية

StackOverflow https://stackoverflow.com/questions/3824389

  •  26-09-2019
  •  | 
  •  

سؤال

أنا أكره أن أعترف بذلك بمعرفتي بـ MySQL عندما يتعلق الأمر بالاستعلامات الأكثر تعقيدًا. في الأساس لدي أربعة جداول تحتوي على البيانات التي أريد إرجاعها ، واثنين من الجداول العلائقية التي تربط البيانات. Table A موجود فقط لتوفير حشو Table D.aID.

+--------+ +--------+ +--------+ +-----------+ +-----------+
|Table A | |Table B | |Table C | |  Table D  | |  Table E  |
+---+----+ +---+----+ +---+----+ +---+---+---+ +---+---+---+
|aID|name| |bID|name| |cID|name| |dID|aID|bID| |eID|dID|cID|
+---+----+ +---+----+ +---+----+ +---+---+---+ +---+---+---+
| 1 | a_1| | 1 | b_1| | 1 | c_1| | 1 | 1 | 1 | | 1 | 1 | 1 |
+---+----+ | 2 | b_2| | 2 | c_2| | 2 | 1 | 2 | | 1 | 1 | 2 |
           +---+----+ | 3 | c_3| +---+---+---+ +---+---+---+
                      +---+----+

العلاقة التي تم إنشاؤها مع هذه الجداول هي: Table A > Table B > Table C. البيانات التي أريدها تنتمي إلى Table B > Table C صلة.

+--------+---------+--------+---------+
|tblB.bID|tblB.name|tblC.cID|tblC.name|
+--------+---------+--------+---------+
|    1   |    a_1  |    1   |   c_1   |
|    1   |    a_1  |    2   |   c_2   |
|    2   |    a_2  |  NULL  |   NULL  |
+--------+---------+--------+---------+

ومع ذلك للتأكد من أنني أتابع المسار الصحيح الذي أحتاجه للاستيلاء على Table B التابع Table A > Table B صلة Table C ينتمي إلى. أدرك أنني أجعل الأمور أكثر صعوبة بالنسبة لنفسي من خلال السماح بالتكرار name القيم ، لكنني أفضل أن يكون لدي طاولات صغيرة واستعلامات أكثر تعقيدًا من الجداول المنتفخة والاستعلامات البسيطة. الاستعلام الذي أستخدمه

SELECT * FROM `Table E`
LEFT JOIN `Table D` ON (`Table B`.bID = `Table D`.bID)
RIGHT JOIN `Table E` ON (`Table D`.dID = `Table E`.dID))
RIGHT JOIN `Table C` ON (`Table E.cID = `Table C`.cID);

لكن حتى الآن لم ينجح. عند إرسال الاستعلام ، يتم إرجاع هذا الخطأ:

ERROR 1066 (42000): Not unique table/alias: 'Table D'

أي أفكار حول كيف يمكنني الحصول على هذا العمل؟ هل هذا ممكن؟

هل كانت مفيدة؟

المحلول 2

بفضل مارتن سميث ، تمكنت من التوصل إلى الحل الذي نشره هنا. آمل أن يكون هذا قادرًا على مساعدة شخص آخر.

SELECT  tblB.bID,
    tblB.name,
    tblC.cID,
    tblC.name
FROM Table E 
RIGHT JOIN Table B ON (Table B.bID = Table D.bID)
RIGHT JOIN Table D USING dID
RIGHT JOIN Table C USING cID;

نصائح أخرى

الاستعلام الذي تقوله إنك تقوم بتقديم الدببة القليل من التشابه مع بنية الجدول التي قدمتها لنا! ما هو Table D.national_regionID؟ أو modx.coverage_state?

عموما على الرغم من عدم خلط ينضم اليسار واليمين. كما يجب أن يتبع كل جدول يستخدم في الاستعلام FROM أو اتبع أ JOIN. يبدو أنك تستخدم Table B و Table C في ظروف الانضمام دون إضافتها إلى الاستعلام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top