一部のソフトウェア ライブラリによって自動的に生成される次のクエリを理解しようとしています。
SELECT DISTINCT `t`.* FROM `teacher` AS `t`
LEFT JOIN `rel` AS `rel_profile`
ON `rel_profile`.`field_id` = 2319 AND `rel_profile`.`item_id` = `t`.`id`
LEFT JOIN `teacher_info` AS `profile`
ON `profile`.`id` = `rel_profile`.`related_item_id`
LEFT JOIN `rel` AS `rel_profile_city`
ON `rel_profile_city`.`field_id` = 2320 AND `rel_profile_city`.`item_id` = `profile`.`id` WHERE `rel_profile_city`.`item_id` = 1
左結合は 3 つあります。1枚目と2枚目は分かります。私が理解していないのは、3 番目の左結合です。
LEFT JOIN `rel` AS `rel_profile_city`
ON `rel_profile_city`.`field_id` = 2320 AND `rel_profile_city`.`item_id` = `profile`.`id` WHERE `rel_profile_city`.`item_id` = 1
テーブルrel
は、最初の左結合で既に使用されています。
LEFT JOIN `rel` AS `rel_profile`
ON `rel_profile`.`field_id` = 2319
ここで、同じテーブルが再度結合されたままになりますが、今回は結合されたフィールドの値が異なります。
LEFT JOIN `rel` AS `rel_profile_city`
ON `rel_profile_city`.`field_id` = 2320
この 2 つの結合が矛盾しないのはなぜですか?