mysql - 使用 SQL 查询检索具有空值的记录时面临的问题
问题描述
我在获取包含某些特定列中的空值的员工记录时遇到问题。
设想:
我有下表:
employee_id Name job_id department_id
(int) (varchar) (int) (int)
-------------------------------------------------------
1 Sita 1 4
2 Ram 3 5
3 Hari (null) (null)
下面给出了选择员工记录的查询:
SELECT
employees.EMPLOYEE_ID,
employees.Name,
jobs.job_title,
departments.department_name,
FROM
employees,jobs,departments
WHERE
jobs.job_id=employees.job_id
AND departments.department_id=employees.department_id
测试完成:
通过上述查询,我可以获取具有 employee_id = 1 和 employee_id = 2 的员工的记录。
面临的问题:
但是使用相同的查询,我无法获取employee_id = 3 的员工的记录。
要求的结果:
应显示employee_id = 3 的记录。
我需要什么修正才能得到我想要的结果?
解决方案
切勿在FROM
子句中使用逗号。 始终使用正确、明确、标准的JOIN
语法。
你只想要一个LEFT JOIN
:
SELECT e.EMPLOYEE_ID, e.Name, j.job_title, d.department_name,
FROM employees e LEFT JOIN
jobs j
ON j.job_id = e.job_id LEFT JOIN
departments d
ON d.department_id = e.department_id;
推荐阅读
- google-apps-script - 删除一个单元格时如何在给定单元格中插入一个复选框
- javascript - 尝试按百分比增加进度条
- laravel - Auth 如何与子域一起使用?
- lua - 在 Lua 中使用 coronaSDK 更改表中的值
- r - 如何使用 par(new=T) 在循环中绘图?
- spring - Dynamically set max-messages-per-poll property of pollerMetaData
- sqlite - 使用查询从不同的表中获取信息
- android - 如何在 maxLine TextView 的最后一行应用水平渐变边缘
- python-3.x - Groupby并找出不同之处
- javascript - 5次调用后Ajax获取请求未得到响应