CTE неправильный синтаксис - PullRequest
1 голос
/ 17 июня 2011

Я пытаюсь написать SQL-запрос к следующему (с этого сайта http://sqlzoo.net/1b.htm)

В какие годы была присуждена премия по физике, но не по химии. (ПРЕДУПРЕЖДЕНИЕ - этот вопросслишком сложно для этого уровня, вам нужно будет использовать подзапросы или объединения).

1-я попытка:

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 как (выберите yr, предмет из nobel, где subject <>' Химия 'встрока 1

что не так?

2-я попытка:

select o.yr
from 
(select yr, subject
from nobel
where subject <> 'Chemistry') o
group by o.yr
having o.subject ='Physics'

Но я получаю синтаксическую ошибку:

Неизвестный столбец«o.subject» в «имеющий предложение»

что не так?

3-я попытка: как мне это сделать с JOIN?

Ответы [ 3 ]

1 голос
/ 17 июня 2011

Проблема в вашем первом запросе - предложениеЗдесь вы можете использовать агрегацию только по столбцу

, так что это будет работать

;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

та же проблема со вторым

Наличие в T-SQL

0 голосов
/ 17 июня 2011

Вы можете достичь того же результата без подвыборов. Вот как это может быть реализовано в MySQL:

SELECT yr
FROM nobel
GROUP BY yr
HAVING COUNT(subject = 'Chemistry' OR NULL) = 0
   AND COUNT(subject ='Physics' OR NULL) = 1
0 голосов
/ 17 июня 2011

Это один правильный ответ, но я все же хотел бы понять свои ошибки.

   select distinct yr
    from nobel
    where subject = 'Physics'
    and yr not in (select yr from nobel where subject = 'Chemistry')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...