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

MySQL INNER JOIN gồm 3 bảng với số lượng và tổng số

Vì các đơn đặt hàng được liên kết với các công ty thông qua khách hàng, tôi không nghĩ bạn cần phải thực hiện hai truy vấn con riêng biệt và kết hợp chúng với nhau; đúng hơn, tôi nghĩ bạn chỉ có thể viết:

SELECT companies.company AS "Company",
       IFNULL(COUNT(DISTINCT companies_customers.customer_id), 0) AS "Total Customers",
       IFNULL(SUM(orders.amount), 0) AS "All Orders Total"
  FROM companies
  LEFT
  JOIN companies_customers
    ON companies_customers.company_id = companies.id
  LEFT
  JOIN orders
    ON orders.customer_id = companies_customers.customer_id
 GROUP
    BY companies.id
;

Đã chỉnh sửa để thêm: Điều đó nói rằng, tôi phải nói rằng lược đồ không thực sự có ý nghĩa đối với tôi. Bạn có mối quan hệ nhiều-nhiều giữa khách hàng và công ty - ví dụ:John Smith là khách hàng của Acme Widget Company của Intrepid Inc. - nhưng khi đó đơn đặt hàng chỉ là tài sản của khách hàng, không của công ty. Điều này có nghĩa là nếu một đơn đặt hàng thuộc về John Smith , thì nó nhất thiết phải thuộc về cả hai tới Acme Widget Company tới Intrepid Inc. . Tôi không nghĩ rằng điều đó có thể đúng. Thay vì có customer_id trường, tôi nghĩ orders cần có companies_customers_id trường.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. php thay thế các khóa id mảng

  2. Nhược điểm của việc lưu trữ hình ảnh trong Cơ sở dữ liệu?

  3. Phương thức xác thực 'mysql_old_password' không được hỗ trợ

  4. Làm thế nào để hiển thị hình ảnh blob mysql trong html bằng cách sử dụng Vuejs?

  5. Cách tạo bảng trong MySQL