sql >> Databáze >  >> RDS >> Mysql

Připojení MySQL a COUNT() na více tabulkách

Budete muset použít DISTINCT , ale také musíte počítat ID, ne cizí klíče:

SELECT
    table1.name,
    COUNT(DISTINCT table2.id) AS table2_count,
    COUNT(DISTINCT table3.id) AS table3_count,
    COUNT(DISTINCT table4.id) AS table4_count,
    SUM(table4.size) AS table4_size
FROM table1
LEFT JOIN table2 ON table1.id = table2.table1_id
LEFT JOIN table3 ON table2.id = table3.table2_id
LEFT JOIN table4 ON table3.id = table4.table3_id
WHERE table1.id = 1

Zde je housle .

Vysvětlení: DISTINCT klíčové slovo eliminuje všechny duplicitní hodnoty, což vede k seznamu jedinečných hodnot.

Pokud spustíte dotaz bez COUNT() a SUM() , získáte:

name  table1_id  table2_id  table3_id  size
test  1          1          1          1024 
test  1          1          1          200 
test  1          (null)     (null)     (null) 
test  1          (null)     (null)     (null) 

Pokud tedy přidáte COUNT() a SUM() , evidentně dostáváte:

name  table1_id  table2_id  table3_id  size
test  4          2          2          1224 

Nicméně pomocí DISTINCT s vaším dotazem nepomůže, protože můžete jasně vidět duplicitní hodnoty, což bude mít za následek:

name  table1_id  table2_id  table3_id  size
test  1          1          1          1224 

Nyní, pokud spustíte můj dotaz bez COUNT() a SUM() , získáte:

name  table1_id  table2_id  table3_id  size
test  1          1          1          1024 
test  1          1          2          200 
test  2          (null)     (null)     (null) 
test  3          (null)     (null)     (null) 

Pokud přidáte COUNT() a SUM() , získáte přesně stejné výsledky jako váš dotaz:

name  table1_id  table2_id  table3_id  size
test  4          2          2          1224 

Protože však tentokrát máte různé hodnoty (tj. ne všechny jsou 1), tak nyní, pokud spočítáte jedinečné hodnoty pomocí DISTINCT , získáte:

name  table1_id  table2_id  table3_id  size
test  3          1          2          1224 


  1. porovnejte dvě pole čísel a odstraňte duplikáty v php

  2. Jak testovat Select pro aktualizaci v MySQL

  3. Jak uložit datum v unixových milisekundách v Mysql?

  4. Jak správně nastavit připojení PDO