2017-01-06 4 views
0

Я пытаюсь написать подзапрос, как этотSQL подзапрос не работает

SELECT GenreNaam, 
GenreCount = (SELECT COUNT(GK.GenreID) 
       FROM GenreKoppel GK 
       WHERE GK.GenreID = G.GenreID) 
FROM Genre G 

Но я получаю ошибку

1054 - Неизвестный столбец 'GenreCount' в 'списке поля'

Я новичок в подзапросе, что я делаю неправильно.

+2

Я не думаю, что mysql поддерживает выдачу псевдонимов столбцов, используя: 'Alias ​​= something', вы должны попробовать' something as GenreCount' – Lamak

+0

'GenreCount ='? это действительно? –

+1

@ Fred-ii- Это в SQL Server, но я думаю, что он не поддерживается в mysql – Lamak

ответ

4

Вы используете определения псевдонима типа SQL Server, которые не работают в MySQL. Вместо этого используйте AS, чтобы указать псевдоним (или просто просто укажите имя псевдонима после подзапроса).

SELECT GenreNaam, 
     (SELECT COUNT(GK.GenreID) FROM GenreKoppel GK 
     WHERE GK.GenreID = G.GenreID) AS GenreCount -- or just GenreCount 
FROM Genre G 

Этот запрос также может быть написан с использованием объединения:

SELECT G.GenreNaam, 
     COALESCE(GK.GenreCount, 0) AS GenreCount 
FROM Genre G 
LEFT JOIN 
(
    SELECT GenreID, COUNT(*) AS GenreCount 
    FROM GenreKoppel 
    GROUP BY GenreID 
) GK 
    ON G.GenreID = GK.GenreID 

Этот альтернативный подход также используется подзапрос, но не коррелируется в отличие от одного в исходном запросе. Я бы ожидал, что подход объединения будет работать быстрее в целом.

+0

Спасибо, я посмотрел несколько примеров в Интернете и didn Я не понимаю, что это не сработает в mysql. –

+0

Почему это получило понижение? или я что-то пропустил? –

+0

Тим, ты что-нибудь курите? – Strawberry