2012-05-02 6 views
5

Ich möchte eine Abfrage erstellen, die ein Produkt aus der Produkttabelle, den Typ und die Kategorie aus der Typentabelle und die Anzahl der Songs auf dem Produkt erhält . Aber irgendwie wirft diese Abfrage einen Fehler. Es begann, als ich count(n.name)Ungültig, weil es nicht in einer Aggregatfunktion oder der Gruppe enthalten ist durch Klausel

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) 
hinzugefügt

Der Fehler ich

Spalte ‚Products.name‘ ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion oder die GROUP BY enthalten ist Klausel.

Antwort

6

Gruppe nur Songs Reihen, verbinden sie dann die aggregierten Daten anstelle der Songs Tabelle richtige:

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) 

Auf diese Weise können fast alle Spalten Ihrer Ausgabe der Klausel GROUP BY Zugabe vermeiden werde, was Sie in der Abfrage tun müssten, die in Ihrer Frage gepostet wurde.

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

Vielleicht eine Erklärung zu * warum * er braucht GROUP BY wäre vorhanden? –

+0

Jetzt bekomme ich 'Te Text, Ntext und Bild Datentypen können nicht verglichen oder sortiert werden, außer wenn IS NULL oder LIKE-Operator verwenden.' – Jerodev

+0

Ok, Sie brauchen eine Gruppe nach, weil Sie eine Aggregatfunktion in der SELECT-Klausel haben. –

Verwandte Themen