Hãy xem xét ba bảng -MYSQL: truy vấn SQL để trả về một hàng chỉ khi tất cả các hàng thỏa mãn một điều kiện
users
id | type
-----------|------------
1 | a
2 | b
3 | c
types
id | type
-----------|------------
a | X
a | Y
b | X
c | X
c | Y
c | Z
training_status
id | training| status
-----------|-----------|-------------
1 | X | F
2 | X | S
2 | Y | S
3 | X | F
3 | Y | S
Mỗi người dùng có một loại, và các loại xác định đào tạo mà mỗi người dùng của một loại đặc biệt phải hoàn thành.
training_status
chứa trạng thái của tất cả các khóa đào tạo mà người dùng đã thực hiện và kết quả của nó (S, F). Người dùng vẫn chưa được đào tạo, sẽ không có bất kỳ hàng nào cho khóa đào tạo đó.
Tôi muốn tìm hiểu tất cả người dùng đã hoàn tất thành công tất cả các khóa đào tạo mà họ phải thực hiện.
Dưới đây là hướng mà tôi đang nghĩ trong:
select
id
from users
join types
using (type)
left join training_status
using (id,type)
where status NOT IN(None, F);
Rõ ràng đây không phải là câu hỏi đúng vì ngay cả khi người dùng đã hoàn thành một trong những huấn luyện, chúng tôi nhận hàng đó. Trong ví dụ trên, tôi muốn lấy id = 2 vì anh ta đã hoàn thành cả hai khóa đào tạo của loại hình này.
trả lời nhờ Peter: 'SELECT id, SUM (tình trạng IS NULL hoặc Status không phải là 'S') như cấp phát từ những người dùng tham gia các loại sử dụng (loại) tham gia training_status sử dụng (id, đào tạo) nhóm theo id đang chờ = 0; ' –