У меня есть две таблицы: полномочия и расчеты. «Расчеты» содержат стороннюю ссылку на полномочия.
У урегулирования также может быть статус (ОШИБКА, ПРИНЯТО и т. Д.).
Учитывая эти данные:
Authorizations Settlements
id id | auth_id | status
----- ---------------------------
1 1 1 ERROR
2 2 1 ACCEPTED
Я пытаюсь написать SQL-запрос, чтобы найти все полномочия, которые не имеют принятой записи расчета. Я попытался LEFT OUTER JOIN, но он возвращает слишком много строк. Например:
SELECT * FROM authorizations a<br>
LEFT OUTER JOIN settlements s ON a.id = s.auth_id<br>
WHERE s.status is null OR s.status != 'ACCEPTED'
Проблема в том, что он по-прежнему будет возвращать запись авторизации, если у нее более одной записи расчета, и одна из них ПРИНЯТА. Или, если имеется более одной записи ERROR, авторизация будет возвращена дважды.
Как можно получить только отдельные записи авторизации, которые не имеют соответствующей записи расчета со статусом "ПРИНЯТО"? Возможно ли это с прямым SQL, или мне придется фильтровать результаты в моем коде?