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

Dołącz do dwóch tabel mysql, relacja jeden do wielu

Musisz użyć GROUP BY wyjaśnić, na podstawie jakich grup należy liczyć. Bez GROUP BY po prostu otrzymujesz pojedynczą grupę z całego zestawu wyników, jak widziałeś.

W standardowym SQL konieczne jest uwzględnienie w GROUP BY klauzula każdego wyrażenia niezagregowanego, które jest zawarte w SELECT klauzula, ale MySQL pozwala ci tego nie robić, pozwalając na wyrażenie podobne do poniższego. (Przynajmniej, gdy nie jest w trybie ścisłym; nie jestem pewien, czy tryb ścisły wzmacnia to wymaganie, aby dopasować standardowy SQL)

SELECT `items`.*, COUNT(1) AS points
FROM `items` INNER JOIN `points` ON `items`.`id` = `points`.`item_id`
WHERE ...
GROUP BY `items`.`id`

Zakładając, że items.id jest kluczem podstawowym tej tabeli, więc nie pojawi się w więcej niż jednym wierszu items , powinno to przynieść pożądany efekt.

Po wprowadzeniu GROUP BY ważne jest, aby zrozumieć różnicę między WHERE i HAVING klauzule. Pierwszy stosuje warunek przed grupa i agregaty są stosowane, a druga stosuje się później . Oznacza to, że musisz użyć HAVING jeśli chcesz wykonać warunkowy na podstawie tej liczby; WHERE klauzula w twoim początkowym przykładzie będzie obowiązywać przed sumą, więc wynikiem będzie liczba punktów utworzonych po podanej dacie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Prawdziwy max_execution_time dla PHP na Linuksie

  2. Spring-Hibernacja przy użyciu wielu źródeł danych/bazy danych

  3. pętla mysql prowadzi do php poza zapytaniem mysql

  4. Naprawianie błędu 1064 SQL Importowanie bazy danych do Wampserver

  5. Pobierz dane z mysql i wyświetl w formie tabeli tekstowej ascii w przeglądarce