首页 > 解决方案 > 使用嵌套查询是否会通过简单查询向 sql 查询添加语义

问题描述

   create table students(id int,
   name varchar(20),
   dept varchar(10),
   salary int default 10000
   );

Insert into students values(1,'Ram','HR',10000);
Insert into students values(2,'Amrit','Mrkt',20000);
Insert into students values(3,'Ravi','HR',30000);
Insert into students values(4,'Raju','finance',40000);

我的导师告诉我的查询:

select name from employee where dept in(select dept from emp group by dept having count(*)<2);

他告诉我们应该只将该属性与已在 group by 中使用的 select 语句一起使用,其他属性不能使用。

但以下查询也有效:

select name from employee group by dept having count(*)<2;

我的查询是对还是错?如果它是正确的,使用它作为嵌套查询比简单查询有什么优势?

标签: mysqlsqlselectinserthaving

解决方案


如果您只有一个匹配的行,那么您可以使用:

select max(name)
from employee
group by dept
having count(*) = 1;

having子句保证一个匹配。max()返回一行中的值。

这很好,但不是很正统——它不能很好地概括。您的导师建议的形式更具普遍性。它很容易适应在有 2 名或 7 名员工的部门中寻找员工。


推荐阅读