كيف يمكنني استخدام JOIN اليسرى مرتين على نفس كولوم مع MySQL؟

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

  •  12-09-2019
  •  | 
  •  

سؤال

لدي طاولان، واحد للمطارات والآخر للطرق.

المطارات تبدو مثل هذا

Airports
-------------------------------------
id | code | name                    |
-------------------------------------
01 | LGW  | London Gatwick          |
-------------------------------------
02 | LHR  | London Gatwick          |

وما إلى ذلك وهلم جرا....

وآخر للطرق مثل هذا

Routes
---------------------------
id | ORIGIN | DESTINATION |
---------------------------
01 | LGW    | VCE         |
---------------------------
02 | TSF    | LHR         |

وما إلى ذلك وهلم جرا...

أحتاج إلى تحديد طرق من الجدول، لكنني أريد أيضا الحصول على أسماء المطارات أيضا. الشيء المربك هو أنني بحاجة للاستعلام عن رمز المطار مرتين. أحاول شيئا مثل هذا

SELECT routes.*, airports.name as origin_name FROM routes
LEFT JOIN airports ON airports.IATA = routes.origin
LEFT JOIN airports ON airports.IATA = routes.destination
WHERE origin = 'LHR' AND destination = 'VCE' OR origin = 'VCE'

التي قد تعرفها أو لا تعرفها، لا تعمل. كيف لي أن تذهب عن القيام بذلك؟

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

المحلول

استخدام الأسماء المستعارة:

SELECT
    routes.*,
    a1.name AS origin_name,
    a2.name AS destination_name
FROM routes r
LEFT JOIN airports a1 ON a1.IATA = r.origin
LEFT JOIN airports a2 ON a1.IATA = r.destination
WHERE
    r.origin = 'LHR' AND r.destination = 'VCE' OR r.origin = 'VCE'

نصائح أخرى

فقط أعط الطاولة اثنين من الأسماء المستعارة المختلفة. شيء مثل (غير مختبر)؛

SELECT routes.*, o.name as origin, d.name as destination FROM routes
LEFT JOIN airports o ON o.IATA = routes.origin
LEFT JOIN airports d ON d.IATA = routes.destination
WHERE origin = 'LHR' AND destination = 'VCE' OR origin = 'VCE'

تحتاج إلى إضافة جدول المطارات مرتين باستخدام الأسماء المستعارة ....

SELECT ORIGIN_AIRPORT.NAME,
       DESTINATION_AIRPORT.NAME
FROM   AIRPORTS ORIGIN_AIRPORT,
       AIRPORTS DESTINATION_AIRPORT,
       ROUTES
WHERE  ROUTES.ORIGIN = ORIGIN_AIRPORT.CODE
AND    ROUTES.DESTINATION = DESTINATION_AIRPORT.CODE;

ضع اسم مستعار على أسماء الطاولة:

SELECT routes.*, a1.name as origin_name FROM routes
LEFT JOIN airports AS a1 ON a1.IATA = routes.origin
LEFT JOIN airports AS a2 ON a2.IATA = routes.destination
WHERE origin = 'LHR' AND destination = 'VCE' OR origin = 'VCE'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top