MySQL 不支持 FULL OUTER JOIN
。不过我们可以用 UNION
的方式来模拟 FULL OUTER JOIN
来实现相同的功能。
✅ MySQL 版本的 SQL 解法:
SELECT employee_id
FROM (
SELECT e.employee_id, e.name, s.salary
FROM Employees e
LEFT JOIN Salaries s ON e.employee_id = s.employee_id
UNION
SELECT s.employee_id, e.name, s.salary
FROM Salaries s
LEFT JOIN Employees e ON e.employee_id = s.employee_id
) AS merged
WHERE name IS NULL OR salary IS NULL
ORDER BY employee_id;
💡思路说明:
我们把两个 LEFT JOIN
结果 UNION
起来:
-
第一个部分找出有姓名但可能缺薪水的员工;
-
第二个部分找出有薪水但可能缺姓名的员工;
-
然后在合并结果中筛选
name IS NULL OR salary IS NULL
的记录即可。