我正在尝试将sql查询写入以下内容(来自此网站http://sqlzoo.net/1b.htm)
哪些年是物理学奖 获奖但没有获得化学奖。 (警告 - 这个问题也是如此 这个级别很难,你需要 使用子查询或连接)。
第一次尝试:
with c as
(select yr, subject
from nobel
where subject <> 'Chemistry')
select yr
from c
group by yr
having c.subject ='Physics'
但是我收到语法错误:
您的SQL语法有错误; 检查对应的手册 您的MySQL服务器版本 正确的语法在'与c一起使用'附近 (选择年份,主题来自诺贝尔在哪里 主题&lt;&gt;第1行的“化学”
出了什么问题?
第二次尝试:
select o.yr
from
(select yr, subject
from nobel
where subject <> 'Chemistry') o
group by o.yr
having o.subject ='Physics'
但是我收到语法错误:
'have'中的未知列'o.subject' 条款“
出了什么问题?
第3次尝试: 如何使用JOIN执行此操作?
答案 0 :(得分:1)
第一个查询中的问题是有子句。您只能在此处使用列聚合
所以这些将起作用
;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
与第二个相同的问题
答案 1 :(得分:0)
这是一个正确的答案,但我仍然想了解我的错误。
select distinct yr
from nobel
where subject = 'Physics'
and yr not in (select yr from nobel where subject = 'Chemistry')
答案 2 :(得分:0)
如果没有子选择,您可以获得相同的结果。这是它在MySQL中的实现方式:
SELECT yr
FROM nobel
GROUP BY yr
HAVING COUNT(subject = 'Chemistry' OR NULL) = 0
AND COUNT(subject ='Physics' OR NULL) = 1