Я бродил в Google с этим в течение нескольких часов.
Там две таблицы:
AccountTable
ID | AccountID | OrderID
OrderTable
ID | OrderID | OrderStatus
OrderStatus может иметь значения 1,2,3,4, где 4 означает завершенный статус.
В таблицу заказов добавляется несколько строк по мере обновления статуса заказа. Таким образом, для выполненного заказа у вас будет 4 строки со статусом 1, 2, 3 и 4 соответственно в таблице заказов.
На одном аккаунте может быть несколько заказов.
Я хочу найти аккаунты, для которых выполнены все заказы.
Я нашел до этого много:
select * from AccountTable
INNER JOIN OrderTable
ON AccountTable.OrderID = OrderTable.OrderID
AND OrderTable.OrderStatus = 4
При этом будут выбраны учетные записи, для которых хотя бы один заказ находится в статусе выполненного.
Но это не распространяется на сценарий, когда один заказ выполнен, а другой заказ для той же учетной записи — нет. Тогда я не хочу выбирать аккаунт.
РЕДАКТИРОВАТЬ: я просто хотел показать некоторые данные, чтобы сделать это более понятным:
AccountTable
1 | Name1 | Order1
2 | Name1 | Order2
3 | Name2 | Order3
4 | Name2 | Order4
OrderTable
1 | Order1 | 1
2 | Order1 | 2
3 | Order1 | 3
4 | Order2 | 1
5 | Order2 | 2
6 | Order2 | 3
7 | Order2 | 4
8 | Order3 | 1
9 | Order3 | 2
10 | Order3 | 3
11 | Order3 | 4
12 | Order4 | 1
13 | Order4 | 2
14 | Order4 | 3
15 | Order4 | 4
Я хочу получить только Name2, а НЕ Name1.