11-02-2009, 20:57
|
מנהל
|
|
חבר מתאריך: 26.07.08
הודעות: 6,473
|
|
ביצוע INNER JOIN על תוצאות מ-LEFT (או: קינון JOIN) + קדימויות
אני משתמש ב- MySQL 5.1.25.
השאילתא הבאה:
קוד:
SELECT mr.* FROM `db_name`.modules_refer mr
INNER JOIN `db_name`.page_modules pm ON mr.mr_id=pm.pm_mr_id
LEFT JOIN `db_name`.pages p ON pm.pm_p_id=p.p_id
INNER JOIN `db_name`.menus mn ON p.p_id=mn.mn_p_id
WHERE mr.mr_module_type IN (1,2,3)
#GROUP BY pm.pm_p_id
לא מחזירה לי שום תוצאות. התוצאה תמיד ריקה, לא משנה מאיזה טבלה אני מנסה לקחת מידע.
משום מה, כאשר אני מוריד את ה-INNER JOIN האחרון, כפי שכתוב בשאילתא הבאה:
קוד:
SELECT mr.* FROM `db_name`.modules_refer mr
INNER JOIN `db_name`.page_modules pm ON mr.mr_id=pm.pm_mr_id
LEFT JOIN `db_name`.pages p ON pm.pm_p_id=p.p_id
WHERE mr.mr_module_type IN (1,2,3)
#GROUP BY pm.pm_p_id
אז השאילתא מחזירה תוצאות מכל הטבלאות.
למה במקרה הראשון לא חוזרות תוצאות כלל?
לפי ההיגיון זה אמור לעבוד טוב.
אני מניח שיש כאן עניין של קדימויות JOIN, כי כאשר אני מריץ את שתי השאילתות הנ"ל, לא מוצגת לי שום שגיאה של SQL.
תודה רבה
נ.ב. ב- MySQL הסימן '#' פירושו הערה עבור השורה הספציפית, בדיוק כמו ב-PHP.
נערך לאחרונה ע"י dorM בתאריך 11-02-2009 בשעה 20:59.
|