Mysql 嵌套SQL查询

Mysql 嵌套SQL查询,mysql,sql,nested,Mysql,Sql,Nested,我对以下SQL查询有问题: SELECT job FROM (SELECT job, COUNT(*) AS cnt FROM Employee GROUP BY job) WHERE cnt=1 因此,它应该只显示cnt(作业计数)等于1的所有作业。 当我在Fiddle上测试上面的select查询时,我得到以下错误: Incorrect syntax near the keyword 'WHERE'. SQLFiddle:您忘记添加别名了。 请像这样更改查询 SELECT job F

我对以下SQL查询有问题:

SELECT job
FROM (SELECT job, COUNT(*) AS cnt
FROM Employee
GROUP BY job)
WHERE cnt=1
因此,它应该只显示cnt(作业计数)等于1的所有作业。
当我在Fiddle上测试上面的select查询时,我得到以下错误:

   Incorrect syntax near the keyword 'WHERE'.

SQLFiddle:

您忘记添加别名了。 请像这样更改查询

SELECT job
FROM (SELECT job, COUNT(*) AS cnt
FROM Employee
GROUP BY job) As MyTable
WHERE cnt=1

在外部使用select和where子句时,应该为内部查询提供别名

您忘记添加别名了。 请像这样更改查询

SELECT job
FROM (SELECT job, COUNT(*) AS cnt
FROM Employee
GROUP BY job) As MyTable
WHERE cnt=1

在外部使用select和where子句时,应该为内部查询提供别名

不需要子查询时,无需使用子查询来增加复杂性

SELECT job, count(job)
FROM Employee
GROUP BY job
having count(job)=1;

不需要子查询时,无需使用子查询来增加复杂性

SELECT job, count(job)
FROM Employee
GROUP BY job
having count(job)=1;

您应该使用
HAVING
子句,这是为这类事情完成的。您的请求将是:

SELECT job FROM Employee GROUP BY job
HAVING COUNT(id)=1
文件指出:

SQL标准要求HAVING必须只引用中的列 聚合函数中使用的GROUPBY子句或列。然而, MySQL支持对这种行为的扩展,并允许 将“选择”列表中的列和外部子查询中的列引用为 嗯


需要注意的重要一点是,与
WHERE
子句相反,您可以在
HAVING
子句中使用聚合函数(如count、max、min…)。

您应该使用
HAVING
子句,这是为此类事情完成的。您的请求将是:

SELECT job FROM Employee GROUP BY job
HAVING COUNT(id)=1
文件指出:

SQL标准要求HAVING必须只引用中的列 聚合函数中使用的GROUPBY子句或列。然而, MySQL支持对这种行为的扩展,并允许 将“选择”列表中的列和外部子查询中的列引用为 嗯


需要注意的重要一点是,与
WHERE
子句相反,您可以在
HAVING
子句中使用聚合函数(如count、max、min…。

您需要为嵌套查询提供别名

SELECT A.job
FROM (SELECT job, COUNT(*) AS cnt
FROM Employee
GROUP BY job)A
WHERE A.cnt=1

您需要为嵌套查询提供别名

SELECT A.job
FROM (SELECT job, COUNT(*) AS cnt
FROM Employee
GROUP BY job)A
WHERE A.cnt=1

您应该使用
HAVING
语法:

SELECT job, COUNT(*) AS cnt
FROM Employee
GROUP BY job
HAVING cnt = 1;

您应该使用
HAVING
语法:

SELECT job, COUNT(*) AS cnt
FROM Employee
GROUP BY job
HAVING cnt = 1;


预期的结果是Baker和Gardener吗?您还可以使用HAVING,它将进行外部查询redundant@Loufylouf-是的,面包师,园丁是正确的结果。草莓,你能给我举一个有克劳塞尔的例子吗?是面包师和园丁的预期结果吗?你也可以使用,这将产生外部查询redundant@Loufylouf-是的,面包师,园丁会是正确的结果。草莓,你能给我举个有克劳塞尔的例子吗?谢谢-看起来很简单。:)谢谢-看起来很简单。:)不起作用,它返回一个错误。聚合函数应直接用于
HAVING
子句中。它取决于您的SQL模式。如果您已通过禁用了
仅\u完整\u组,\u,则它应该可以工作。如果不工作,则返回错误。聚合函数应直接用于
HAVING
子句中。它取决于您的SQL模式。如果您禁用了
仅禁用了
,它应该可以工作。我不知道。谢谢你提到这件事,但我想我会用克劳塞尔来解释的。那件很好,而且和你要求的不一样。我纠正了你的疑问。如果它有效,如果它是你问题的直接答案,那么投票并接受。检查已经提出的问题,不是替代解决方案,对吗?你是对的,我会投票,当我有足够的声望点时。我不知道。谢谢你提到这件事,但我想我会用克劳塞尔来解释的。那件很好,而且和你要求的不一样。我纠正了你的疑问。如果它有效,如果它是你问题的直接答案,那么投票并接受。检查你提出的问题,不是备选方案吗?你是对的,当我有足够的声望点数时,我会投票。