2016-04-01 2 views
0

У меня есть проблемы со следующим SQL Query:Вложенного SQL Query

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

Как результат он должен только показывает все рабочие места, где CNT (количество рабочих мест) равны 1.
Когда я проверить выберите выше запрос на Скрипки, я получаю следующее сообщение об ошибке:

Incorrect syntax near the keyword 'WHERE'. 

SQLFiddle: http://sqlfiddle.com/#!6/d812a/7

+0

http://sqlfiddle.com/#!6/d812a/15 – Strawberry

+0

Является ли ожидаемый результат Бейкером и Садовником? – Loufylouf

+0

Вы также можете использовать HAVING, что сделает внешний запрос избыточным – Strawberry

ответ

1

Нет необходимости увеличивать сложности с помощью вложенного запроса, если оно не требует

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

Спасибо, что выглядит очень просто. :) – CallMeBronxy

0

Вы забыли добавить имя псевдонима. Пожалуйста, измените запрос, как этот

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

Вы должны дать имя псевдонима для внутреннего запроса, когда вы используете выбрать и где пункты за пределами.

+0

Не знал этого. Спасибо, что упомянул об этом, но я думаю, что для этого я буду использовать HAVING-Clausel. – CallMeBronxy

+0

Это хорошо, и он отличается от того, что вы просили. Я исправил ваш запрос. и если это сработает, и если это прямой ответ на ваш вопрос, тогда поддержите и примите. Проверьте вопрос, который спросил, а не альтернативное решение? –

+0

Вы правы, я бы поднял голову, когда у меня хватило очков репутации. – CallMeBronxy

0

Вы должны использовать предложение HAVING которое сделано для такого рода вещи. Ваш запрос будет просто:

SELECT job FROM Employee GROUP BY job 
HAVING COUNT(id)=1 

В документации говорится, что

Стандарт SQL требует, чтобы HAVING должно ссылаться только на столбцы в в предложения GROUP BY или столбцов, используемых в агрегатных функциях. Однако MySQL поддерживает расширение для этого поведения и позволяет HAVING ссылаться на столбцы в списке SELECT и столбцах во внешних подзапросах как .

Важно отметить, что в отличие от пункта WHERE, вы можете использовать агрегированные Funcitons (например, счета, макс, мин ...) в пункте HAVING.

1

Вы должны предоставить имя псевдонима для вложенного запроса

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

Вы должны использовать HAVING синтаксис:

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

Не работает, он возвращает ошибку. Агрегатная функция должна использоваться непосредственно в предложении 'HAVING'. – Loufylouf

+0

Это зависит от вашего режима SQL.Если вы отключили 'ONLY_FULL_GROUP_BY', он должен работать. –

Смежные вопросы