考慮三個表 -MYSQL:SQL查詢返回只有當所有行滿足條件的行
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
每個用戶都有一個類型,類型定義了特定類型的每個用戶必須將培訓完成。
training_status
包含用戶已採取的所有培訓及其結果(S,F)的狀態。用戶尚未接受培訓,則不會有任何排隊進行該培訓。
我想找出所有已成功完成所有培訓的用戶。
下面是我正在考慮的方向:
select
id
from users
join types
using (type)
left join training_status
using (id,type)
where status NOT IN(None, F);
顯然,這是不正確的查詢,因爲即使用戶已經完成了培訓的一個,我們得到了該行。在前面提到的例子中,我想獲得id = 2,因爲他已經完成了兩種類型的訓練。
回答感謝Peter:'SELECT ID,SUM(狀態爲空或狀態不是 'S')從用戶使用使用(類型)加入training_status連接類型待定(id,training)group by id having pending = 0;' –