2012-05-02 24 views
5

Chciałbym utworzyć zapytanie, które pobiera produkt z tabeli produktów, jego typ i kategorię z tabeli typów i liczbę utworów na produkcie . Ale jakoś to zapytanie powoduje błąd. To zaczęło się, gdy dodałem count(n.name)Niepoprawne, ponieważ nie jest zawarte w funkcji agregującej lub grupie według klauzuli

SELECT p.name, p.publisher, p.description, p.price, p.picture 
    , p.releasedate, t.type, t.category, count(n.name) AS songs 
    FROM Products p 
INNER JOIN ProductType t ON (p.type_id = t.id) 
INNER JOIN Songs n ON (p.id = n.product_id) 

Błąd pojawia się

Kolumna „Products.name” jest nieprawidłowa w liście wyboru, ponieważ nie jest zawarty w każdej zagregowanej funkcji lub GROUP BY klauzula.

Odpowiedz

6

tylko Songs Grupa wiersze, a następnie dołączyć do zagregowanych danych zamiast Songs tabela właściwa:

SELECT p.name, p.publisher, p.description, p.price, p.picture 
    , p.releasedate, t.type, t.category, n.songs 
    FROM Products p 
INNER JOIN ProductType t ON (p.type_id = t.id) 
INNER JOIN ( SELECT product_id, COUNT(n.name) AS songs FROM Songs GROUP BY product_id ) n ON (p.id = n.product_id) 

ten sposób będziesz unikać dodawania prawie wszystkich kolumn wyjściowych do klauzuli GROUP BY, które musiałbyś zrobić w zapytaniu zamieszczonym w twoim pytaniu.

0
SELECT p.name, p.publisher, p.description, p.price, p.picture, p.releasedate, t.type, t.category, count(1) AS songs 
        FROM Products p 
        INNER JOIN ProductType t ON (p.type_id = t.id) 
        INNER JOIN Songs n ON (p.id = n.product_id) 
GROUP BY p.name, p.publisher, p.description, p.price, p.picture, p.releasedate, t.type, t.category 
+2

Może potrzebne jest wyjaśnienie, dlaczego * potrzebuje * GRUPY BY? –

+0

Teraz otrzymuję komunikat "Nie można porównywać ani sortować tekstów typu Te, ntext i image, z wyjątkiem użycia operatora IS NULL lub LIKE". – Jerodev

+0

Ok, potrzebujesz grupy, ponieważ masz funkcję agregującą w klauzuli SELECT. –

Powiązane problemy