Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Relacja jeden do wielu w MySQL:GROUP_CONCAT lub JOIN czy oba?

Zgadując z zapytania, istnieje również order_id pole w Twoim order_products tabela, której nie wymieniłeś w definicji tabeli. Twoje zapytanie powinno wtedy wyglądać tak:

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

Twój schemat bazy danych jest jednak dość dziwny, tabela zamówień wygląda na to, że mogłaby zostać usunięta i ta data została przeniesiona do order_products, ponieważ dla każdego wiersza order_products masz odniesienie do tabeli orders. Zwykle jest odwrotnie - istnieje wiele zamówień na każdy produkt, do którego odwołuje się pole product_id w tabeli zamówień. Również kolumna daty w zamówieniach jest typu varchar - dlaczego nie data lub data i godzina?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Długości VARCHAR MySQL i UTF-8

  2. Błąd Play framework 2.0 JPA Mysql:Nie można zbudować EntityManagerFactory

  3. Jak efektywnie korzystać z MySQLDB SScursor?

  4. Konfiguracja SSL specyficzna dla środowiska w pliku Laravel .env

  5. Hibernacja:Zakleszczenie podczas próby uzyskania blokady