Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL uno a molti relazione:GROUP_CONCAT o JOIN o entrambi?

Indovinando dalla tua query c'è anche order_id campo nel tuo order_products tabella che non hai menzionato nella definizione della tabella. La tua query dovrebbe quindi essere simile a:

SELECT c.name AS category_name,
             SUM( s.subtotal ) AS amt,
             GROUP_CONCAT( CONCAT(s.name, ' - ', s.subtotal ) SEPARATOR ', ' ) AS subtotals
FROM 
    product_category c 
JOIN 
  ( SELECT op.category, op.name, sum(op.qty*op.unit_price) AS subtotal
    FROM order_products op
    JOIN orders o ON o.id = op.order_id
    WHERE o.date > '2012-03-31'
    GROUP BY op.category, op.name ) s 
  ON s.category = c.id
GROUP BY c.name

Il tuo schema db è piuttosto strano, però, la tabella degli ordini sembra che potrebbe essere rimossa e quella data spostata in order_products, perché per ogni riga order_products hai riferimento alla tabella degli ordini. Di solito è il contrario:ci sono molti ordini per ogni prodotto a cui fa riferimento il campo product_id nella tabella degli ordini. Anche la colonna della data negli ordini è di tipo varchar, perché non date o datetime?