đơn giản và câu hỏi nhanh, tôi có những bảng:Nội tham gia với count() trên ba bảng
//table people
| pe_id | pe_name |
| 1 | Foo |
| 2 | Bar |
//orders table
| ord_id | pe_id | ord_title |
| 1 | 1 | First order |
| 2 | 2 | Order two |
| 3 | 2 | Third order |
//items table
| item_id | ord_id | pe_id | title |
| 1 | 1 | 1 | Apple |
| 2 | 1 | 1 | Pear |
| 3 | 2 | 2 | Apple |
| 4 | 3 | 2 | Orange |
| 5 | 3 | 2 | Coke |
| 6 | 3 | 2 | Cake |
tôi cần phải có một truy vấn danh sách tất cả những người, đếm số lượng các đơn đặt hàng và các tổng số mặt hàng, như vậy:
| pe_name | num_orders | num_items |
| Foo | 1 | 2 |
| Bar | 2 | 4 |
Nhưng tôi không thể làm cho nó hoạt động! tôi đã cố gắng
SELECT
people.pe_name,
COUNT(orders.ord_id) AS num_orders,
COUNT(items.item_id) AS num_items
FROM
people
INNER JOIN orders ON (orders.pe_id = people.pe_id)
INNER JOIN items ON items.pe_id = people.pe_id
GROUP BY
people.pe_id;
Nhưng điều này trả về num_*
giá trị không đúng:
| name | num_orders | num_items |
| Foo | 2 | 2 |
| Bar | 8 | 8 |
tôi nhận thấy rằng nếu tôi cố gắng để tham gia vào một bảng lúc, nó hoạt động:
SELECT
people.pe_name,
COUNT(orders.ord_id) AS num_orders
FROM
people
INNER JOIN orders ON (orders.pe_id = people.pe_id)
GROUP BY
people.pe_id;
//give me:
| pe_name | num_orders |
| Foo | 1 |
| Bar | 2 |
//and:
SELECT
people.pe_name,
COUNT(items.item_id) AS num_items
FROM
people
INNER JOIN items ON (items.pe_id = people.pe_id)
GROUP BY
people.pe_id;
//output:
| pe_name | num_items |
| Foo | 2 |
| Bar | 4 |
Làm thế nào để kết hợp hai truy vấn trong một?
Bàn của bạn thực sự cần phải được tổ chức lại. Bảng mục không nên tham chiếu bảng thứ tự và chắc chắn không phải bảng người, và bạn cần một bảng mới cho mối quan hệ nhiều-nhiều, như các đơn đặt hàng và các mục. –
Tại sao anh ta cần nhiều người đến nhiều nếu một mệnh lệnh chỉ có thể thuộc về một người. Mô hình của ông có ý nghĩa hoàn hảo. –
@adam: tôi không hiểu đề xuất của bạn. Sau đó, chỉ id vô dụng mà tôi thấy là pe_id vào bảng mục, nhưng có thể có thể hữu ích trong tương lai để có được tổng số mục của một người mà không cần tham gia bảng đơn đặt hàng. Ý của bạn là gì với "Bảng mục không nên tham chiếu thứ tự"? – Strae