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