CTE语法错误

时间:2011-06-17 09:45:41

标签: mysql sql

我正在尝试将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执行此操作?

3 个答案:

答案 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

与第二个相同的问题

Having in T- SQL

答案 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