sql >> Database >  >> RDS >> Mysql

MySQL een-op-veel relatie:GROUP_CONCAT of JOIN of beide?

Afgaande op uw zoekopdracht is er ook order_id veld in uw order_products tabel die u niet vermeldde in de tabeldefinitie. Uw vraag zou er dan als volgt uit moeten zien:

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

Je db-schema is echter nogal raar, de besteltabel ziet eruit alsof deze kan worden verwijderd en die datum kan worden verplaatst naar order_products, omdat je voor elke order_products-rij een verwijzing hebt naar de besteltabel. Meestal is het andersom - er zijn veel bestellingen voor elk product waarnaar wordt verwezen door het veld product_id in de tabel met bestellingen. Ook de datumkolom in bestellingen is van het type varchar - waarom geen datum of datetime?



  1. Verbruikt MySQL aanzienlijk meer bronnen in vergelijking met andere DBMS?

  2. Hoe een gekoppelde server MySQL te maken

  3. Waarom is deze SQL-query met subquery erg traag?

  4. URL-tekenreeksindeling voor verbinding met Oracle-database met JDBC