Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL COUNT trong số nhiều liên kết bên trái - tối ưu hóa

Bạn nên cấu trúc lại truy vấn của mình. Bạn có thể làm điều này bằng cách sắp xếp lại cách truy vấn thu thập dữ liệu. Làm thế nào?

  • Áp dụng mệnh đề WHERE trước tiên
  • Áp dụng THAM GIA lần cuối

Đây là truy vấn ban đầu của bạn:

SELECT t1.num1,t2.num2,t3.num3 
FROM member m 
LEFT JOIN 
( 
   SELECT member_id,COUNT(*) as num1 
   FROM table1 
   GROUP BY member_id 
) t1 ON t1.member_id = m.member_id 
LEFT JOIN 
( 
   SELECT member_id,COUNT(*) as num2 
   FROM table2 
   GROUP BY member_id 
) t2 ON t2.member_id = m.member_id 
LEFT JOIN 
( 
   SELECT member_id,COUNT(*) as num3 
   FROM table3 
   GROUP BY member_id 
) t3 ON t3.member_id = m.member_id 
WHERE m.member_id = 27 

Đây là truy vấn mới của bạn

SELECT
   IFNULL(t1.num1,0) num1,
   IFNULL(t1.num2,0) num2,
   IFNULL(t1.num3,0) num3
FROM
(
   SELECT * FROM member m 
   WHERE member_id = 27
) 
LEFT JOIN 
( 
   SELECT member_id,COUNT(*) as num1 
   FROM table1 
   WHERE member_id = 27
   GROUP BY member_id 
) t1 ON t1.member_id = m.member_id 
LEFT JOIN 
( 
   SELECT member_id,COUNT(*) as num2 
   FROM table2 
   WHERE member_id = 27
   GROUP BY member_id 
) t2 ON t2.member_id = m.member_id 
LEFT JOIN 
( 
   SELECT member_id,COUNT(*) as num3 
   FROM table3 
   WHERE member_id = 27
   GROUP BY member_id 
) t3 ON t3.member_id = m.member_id 
;

BTW Tôi đã thay đổi member m thành SELECT * FROM member m WHERE member_id = 27 trong trường hợp bạn cần bất kỳ thông tin nào về thành viên 27. Tôi cũng đã thêm IFNULL hàm cho mỗi kết quả để tạo ra 0 trong trường hợp số lượng là NULL.

Bạn cần hoàn toàn chắc chắn

  • member_id là khóa chính của bảng thành viên
  • member_id được lập chỉ mục trong table1, table2 và table3

Hãy thử !!!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cấu trúc mysql cho các bài đăng và nhận xét

  2. 'LIKE ('% this% 'OR'% that% ') và cái gì đó =else' không hoạt động

  3. MySQL sai đầu ra với mệnh đề IN và tham số

  4. Kết quả Mysql trong PHP - mảng hay đối tượng?

  5. Điều kiện WHERE trong MySQL với 16 ví dụ truy vấn khác nhau