Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL bergabung dan COUNT() di beberapa tabel

Anda harus menggunakan DISTINCT , tetapi Anda juga perlu menghitung ID, bukan kunci asing:

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

Ini adalah biola .

Penjelasan: DISTINCT kata kunci menghilangkan semua nilai duplikat yang menghasilkan daftar nilai unik.

Jika Anda menjalankan kueri tanpa COUNT() dan SUM() , Anda mendapatkan:

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) 

Jadi jika Anda menambahkan COUNT() dan SUM() , Anda jelas mendapatkan:

name  table1_id  table2_id  table3_id  size
test  4          2          2          1224 

Namun, menggunakan DISTINCT dengan kueri Anda tidak akan membantu karena Anda dapat melihat dengan jelas nilai duplikat, yang akan menghasilkan:

name  table1_id  table2_id  table3_id  size
test  1          1          1          1224 

Sekarang, jika Anda menjalankan kueri saya tanpa COUNT() dan SUM() , Anda mendapatkan:

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) 

Jika Anda menambahkan COUNT() dan SUM() , Anda mendapatkan hasil yang sama persis seperti kueri Anda:

name  table1_id  table2_id  table3_id  size
test  4          2          2          1224 

Namun, karena kali ini Anda memiliki nilai yang berbeda (yaitu tidak semuanya 1), jadi sekarang jika Anda menghitung nilai unik menggunakan DISTINCT , Anda mendapatkan:

name  table1_id  table2_id  table3_id  size
test  3          1          2          1224 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tampilkan hari atau tanggal sebagai kolom di mysql

  2. Rentang batas MySQL

  3. Cara melakukan pencarian Accent Sensitive di MySql

  4. MySQL- Apakah mungkin untuk membuat cadangan database mySQL dalam jangka waktu tertentu?

  5. Kueri SQL untuk memasukkan tag WooCommerce tertentu