今天学习mysql ,碰到了一个问题:有部门表,员工表,员工表中有一个部门表的外键,查询没有员工的部门名称。

表结构如下:

员工表employees:

mysql中外联和 is null 结合使用

部门表department表:

mysql中外联和 is null 结合使用

 

题目很简单呢,信手写出sql如下:

##这种写法很愚蠢怎么能写count(*)=0呢,
SELECT * FROM departments d LEFT JOIN employees e ON d.`department_id` =e.`department_id` GROUP BY d.`department_id` HAVING COUNT(*)=0;

运行以后发现坏了,不对。count(*)=0什么时候都不会用到这样的语句的,因为能查询出来count肯定不会是0.

修改后的正确sql如下:

SELECT d.* ,e.employee_id 
FROM departments d 
LEFT JOIN employees e 
ON d.department_id=e.department_id 
WHERE e.employee_id IS NULL;

这个sql利用了外链接的一个特性:如果主表的一条记录和从表任何一条数据都不符合连接条件,则显示出来并且从表应该显示的字段为null.

很简单的问题,可能是自己sql还是没有学好。博客为记。

相关文章:

  • 2021-11-29
  • 2022-01-13
  • 2021-10-28
  • 2022-03-06
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-16
猜你喜欢
  • 2021-11-23
  • 2021-10-09
  • 2022-12-23
  • 2021-09-25
  • 2021-06-29
  • 2022-12-23
  • 2021-10-04
相关资源
相似解决方案