SQL 子查询大于/小于运算符

Posted

技术标签:

【中文标题】SQL 子查询大于/小于运算符【英文标题】:SQL Subquery greater than/less than operators 【发布时间】:2019-05-06 04:00:19 【问题描述】:

我目前正在尝试通过GROUP BY 函数简单地查询jobnamejobid。我使用带有COUNT(jobID) >2 的子查询。尽管如此,输出仍然显示值为 2。我知道我可以使用 HAVING ,但我真的很想知道为什么这不起作用。

SELECT EmployeeType.jobName, COUNT(Employee.JobID) FROM Employee, EmployeeType WHERE (Employee.jobID = EmployeeType.jobID) AND (SELECT COUNT(Employee.jobID) FROM Employee) > 2 GROUP BY EmployeeType.JobName;

输出:

【问题讨论】:

【参考方案1】:

您的子查询与外部查询没有关系。执行该子查询时,它只查询 SELECT COUNT(Employee.jobID) FROM Employee 以获取正在评估的每条记录。该查询的值大于 2,因此每条记录都会被包含在内。

如果我理解你想要做什么,你应该使用 HAVING 子句。

SELECT EmployeeType.jobName, COUNT(Employee.jobID)
FROM Employee, EmployeeType
WHERE Employee.jobID = EmployeeType.jobID
GROUP BY EmployeeType.JobName
HAVING COUNT(Employee.jobID) > 2

【讨论】:

@Micheal,建议您使用ANSI JOIN syntax。 同意。如果我自己写这个,我会使用 INNER JOIN。我只是不想过多地改变 OP 的查询,以便专注于 HAVING 子句。 @Micheal Gunter,好的。明白了 @VenkataramanR:PSA:“迈克尔”不是一个名字。 :) (实际上,它是爱尔兰和苏格兰盖尔语中的一个名字,但 95% 以上的人会用这个名字拼写它。) 知道了。对不起我的错字。我用谷歌搜索找到了迈克尔·杰克逊、迈克尔·乔丹 :)【参考方案2】:

并不是迈克尔的回答是错误的,而是应该完全不鼓励在FROM 子句中使用逗号。所以,我提供了替代答案。

首先,21世纪查询的正确写法是:

SELECT et.jobName, COUNT(*)
FROM Employee e JOIN
     EmployeeType et
     ON e.jobID = et.jobID
GROUP BY et.JobName
HAVING COUNT(e.jobID) > 2;

还要注意表别名的使用。

如果JobNameEmployeeType 中是唯一的,那么您可以使用相关子查询:

select et.jobName,
       (select count(*)
        from employee e
        where e.jobId = et.jobId
       ) as cnt
from employeeType;

然后您将使用子查询来过滤您想要的计数。

【讨论】:

同意。如果我自己写这个,我会使用 INNER JOIN。我只是不想过多地改变 OP 的查询,以便专注于 HAVING 子句。

以上是关于SQL 子查询大于/小于运算符的主要内容,如果未能解决你的问题,请参考以下文章

SQL基础教程读书笔记-1

MongoDB条件查询(比较运算) --- 2022-04-03

mysql 数据操作 子查询 带比较运算符的子查询

sql小于系统时间怎么写

ANY,SOME,ALL 在SQL语句中的区别?

MongoDB查询