原查詢使用隱式內連接(逗號 + WHERE),導致 `teacher_region_info` 無匹配記錄時,`teacher_info` 數據也不顯示。需改為左外連接。
SELECT ...
FROM teacher_info, teacher_region_info
WHERE teacher_info.teacher_id = teacher_region_info.teacher_id
-- 等價於 INNER JOIN,雙方必須有匹配
SELECT ... FROM ... WHERE teacher_info.teacher_id = teacher_region_info.teacher_id
UNION
SELECT ... FROM ... WHERE teacher_info.teacher_id != NULL -- 錯誤:!= NULL 永遠為 UNKNOWN
SELECT
ti.teacher_id, ti.tearcher_name, ti.teacher_number, ti.tearcher_type,
ti.teacher_image, ti.teacher_gender, ti.teacher_birthday, ti.identity_number,
ti.company, ti.technical_title, ti.technical_grade, ti.major_type_id,
ti.major_id, ti.courses_offer, ti.phone, ti.email, ti.relative_material,
ti.LEVEL, ti.country, ti.province, ti.city, ti.region,
tri.city AS region_city -- 明確別名避免衝突
FROM teacher_info ti
LEFT JOIN teacher_region_info tri
ON ti.teacher_id = tri.teacher_id;
| 連接類型 | 關鍵字 | 結果集 |
|---|---|---|
| 內連接 | INNER JOIN / JOIN | 僅雙方匹配的行 |
| 左外連接 | LEFT JOIN / LEFT OUTER JOIN | 左表所有行 + 右表匹配行(無則 NULL) |
| 右外連接 | RIGHT JOIN | 右表所有行 + 左表匹配行 |
| 全外連接 | FULL JOIN / FULL OUTER JOIN | 雙方所有行(無匹配填 NULL) |
系統學習 SQL 連接類型(內/左/右/全),理解集合運算(交集/左差/右差/并集),是寫好查詢的基礎。