2012-05-02 32 views
5

Me gustaría crear una consulta que obtenga un producto de la tabla de productos, su tipo y categoría de la tabla de tipos y el recuento de canciones en el producto . Pero de alguna manera esta consulta arroja un error. Comenzó cuando añadí count(n.name)No válido porque no está incluido en una función de agregado o el grupo por cláusula

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) 

El error que consigo es

Columna 'Products.name' no es válido en la lista de selección, ya que no está contenida en una función de agregado o GROUP BY cláusula.

Respuesta

6

Grupo sólo Songs filas, y luego unirse a los datos agregados en lugar de la tabla adecuada Songs:

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) 

De esta manera evitará la adición de casi todas sus columnas de salida a la cláusula GROUP BY, que tendrías que hacer en la consulta publicada en tu pregunta.

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

¿Quizás una explicación a * por qué * él necesita GROUP BY estaría en su lugar? –

+0

Ahora obtengo 'Los tipos de datos de texto, ntext e imagen no se pueden comparar u ordenar, excepto cuando se usa el operador IS NULL o LIKE'. – Jerodev

+0

Ok, necesitas un grupo porque tienes una función agregada en la cláusula SELECT. –

Cuestiones relacionadas