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

表结构如下:

员工表employees:

部门表department表:

题目很简单呢,信手写出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还是没有学好。博客为记。

最新文章

  1. 《CLR via C#》---枚举标志和标志位
  2. hdfs的读写数据流
  3. linux环境下安装jdk
  4. gradle << 操作符作废
  5. 使用context来传递数据,一个context是一系列变量
  6. lintcode:打劫房屋
  7. lintcode:验证二叉查找树
  8. [c++]程序的内存划分理解
  9. android DatePickerDialog配合edittext实现按日期查询
  10. GitLab Development Kit 环境搭建
  11. 前端性能监控系统 & 前端数据分析系统
  12. 转://WITH AS and materialize hints
  13. 在windows 7上安装TensorFlow
  14. 查看项目中的laravel的版本
  15. ios学习路线—Objective-C(Runtime消息机制)
  16. Django_rest_framework_基础
  17. AVL树/线索二叉树
  18. 自己主动检測&后台复制光盘内容
  19. How do I determine if I'm being run under the debugger?
  20. consul部署多台Docker集群

热门文章

  1. JS实现2048
  2. Google常用拓展插件
  3. Oracle数据的导入导出
  4. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:0.概述
  5. [Jira]启动报错无法删除缓存文件felix-cache的解决方法
  6. MAC MAMP install yaf
  7. LeetCode Valid Anagram (简单题)
  8. WORD窗体保护密码清除
  9. bzoj1189 [HNOI2007]紧急疏散
  10. flex在众多手机浏览器上的兼容方案(亲测华为手机自带浏览器)