Mysql 错误语法
我正在尝试从该站点向以下内容编写sql查询 物理学奖是在哪几年获得的 获奖但没有化学奖。 警告-这个问题太复杂了 很难达到这个水平,你需要 使用子查询或联接 第一次尝试:Mysql 错误语法,mysql,sql,Mysql,Sql,我正在尝试从该站点向以下内容编写sql查询 物理学奖是在哪几年获得的 获奖但没有化学奖。 警告-这个问题太复杂了 很难达到这个水平,你需要 使用子查询或联接 第一次尝试: with c as (select yr, subject from nobel where subject <> 'Chemistry') select yr from c group by yr having c.subject ='Physics' 但我得到一个语法错误: 您的SQL语法有错误; 检查相应
with c as
(select yr, subject
from nobel
where subject <> 'Chemistry')
select yr
from c
group by yr
having c.subject ='Physics'
但我得到一个语法错误:
您的SQL语法有错误;
检查相应的手册
您的MySQL服务器版本
将near'与c一起使用的正确语法
选择yr,从何处获得诺贝尔奖的主题
第1行的“化学”科目
怎么了
第二次尝试:
select o.yr
from
(select yr, subject
from nobel
where subject <> 'Chemistry') o
group by o.yr
having o.subject ='Physics'
但我得到一个语法错误:
“having”中的未知列“o.subject”
条款'
怎么了
第三次尝试:
如何使用JOIN来实现这一点?这是一个正确的答案,但我仍然希望理解我的错误
select distinct yr
from nobel
where subject = 'Physics'
and yr not in (select yr from nobel where subject = 'Chemistry')
第一个查询中的问题是having子句。此处只能在列上使用聚合 所以这些会起作用
;with c as
(select yr, subject from nobel where subject <> 'Chemistry')
select yr,count(c.subject) from c where c.subject ='Physics' group by yr
;with c as
(select yr, subject from nobel where subject <> 'Chemistry')
select yr,count(c.subject) from c group by yr having count(c.subject) =1
与第二个问题相同
无需子选择,也可以获得相同的结果。以下是它在MySQL中的实现方式:
SELECT yr
FROM nobel
GROUP BY yr
HAVING COUNT(subject = 'Chemistry' OR NULL) = 0
AND COUNT(subject ='Physics' OR NULL) = 1
您的标签显示tsql表示Microsoft SQL Server,但您的错误显示MySQL Server,我猜它位于此网站的后面。我猜MySQL不支持CTE。提示:EXISTS是您的朋友我如何更改此帖子标签?无论CTE如何,Have都会在MySQL中的任何RDBMSNo CTE中给您带来相同的问题,我已经重新标记了您的问题。如果出现问题,您可以通过单击帖子下的编辑链接来修复。因此,我可以得出结论:分组时–在have和selectPlease中始终使用agg,CTE查询不需要以分号开头。前面的语句需要以分号结尾。@Pierre Alain:您的断言的问题是SQL语句不需要以分号结尾。因此,出于防御性编码的目的,人们有时会将它们放在需要与前一条语句分隔的语句的开头。在这样的地方尤其如此,因为你不知道代码将粘贴到哪里。我认为最好还是先解决一个不可避免的问题:为什么我的解析器说我需要一个处于萌芽状态的分号,把它放在前面。您最初的CTE解决方案在SQL Server中应该是正确的。但是MySQL不支持CTE,因此需要一个不同的解决方案。