私は2つのテーブルを持っています:
注文:
Id | Status
-----+--------
1 | OK
2 | WAITING
3 | WAITING
4 | OK
5 | OK
6 | OK
そして Order_details:
Id | Order_Id | Status
-----+------------+--------
1 | 1 | S1
2 | 1 | S1
3 | 2 | S1
4 | 4 | S2
5 | 4 | S2
6 | 4 | S3
7 | 5 | S1
8 | 5 | S1
私がする必要があるのは、複数の Order_detail を持つすべての注文を選択することであり、注文ステータスは「OK」でなければならず、すべての order_detailには (S1,S2) のステータスが必要です。
私はこのようなことをしました:
SELECT O.Id FROM Orders O
JOIN Order_details OD
ON O.Id=OD.Order_Id
WHERE O.Status='OK' AND OD.Status IN ('S1','S2')
GROUP BY O.Id
HAVING count(DISTINCT OD.Id)>1
ただし、これは、複数の Order_details を満たす基準を持つすべての注文を返します。
この部分は問題ないと確信しています:
SELECT O.Id FROM Orders O
JOIN Order_details OD
ON O.Id=OD.Order_Id
WHERE O.Status='OK'
GROUP BY O.Id
HAVING count(DISTINCT OD.Id)>1
しかし、上記の注文のすべての Order_detail のステータスが IN (S1、S2) であるかどうかを確認する必要があります。
したがって、注文に 2 つの詳細があり、そのうちの 1 つが status=S1 で 2 番目の S3 の場合、この注文はスキップする必要があります。