SELECT * FROM XUTEST
LEFT JOIN XUTEST2
LEFT JOIN XUTEST3 ON XUTEST2.SUPID = XUTEST3.SUPID
ON XUTEST3.SUPID = XUTEST.SUPID
XUTEST2 LEFT JOIN XUTEST3 ON XUTEST2.SUPID = XUTEST3.SUPID → 產生中間結果集 T23。XUTEST LEFT JOIN T23 ON XUTEST3.SUPID = XUTEST.SUPID。XUTEST 在第二個 ON 子句中可見,故 XUTEST3.SUPID = XUTEST.SUPID 合法。SELECT * FROM XUTEST
LEFT JOIN XUTEST2
LEFT JOIN XUTEST3 ON XUTEST.SUPID = XUTEST2.SUPID
ON XUTEST3.SUPID = XUTEST.SUPID
錯誤原因:第二個 LEFT JOIN XUTEST3 緊跟在 XUTEST2 後,其 ON 子句只能引用 XUTEST2 與 XUTEST3 的欄位。XUTEST 尚未加入關聯,故 XUTEST.SUPID 不可見 → 「標識符無效」。
SELECT *
FROM XUTEST t1
LEFT JOIN XUTEST2 t2 ON t1.SUPID = t2.SUPID
LEFT JOIN XUTEST3 t3 ON t2.SUPID = t3.SUPID;
「JOIN 順序決定可見範圍,ON 只能看前面已 JOIN 的表。」
所有 JOIN 類型皆遵循「從左到右依序建立關聯,ON 只能引用已出現的表別名」。