私には2つのテーブルがあります:承認と決済です。'Settlements'には、権限への外部キー参照が含まれています。
決済には、ステータス(ERROR、ACCEPTEDなど)を含めることもできます。
このデータを考えると:
承認の決済 id id | auth_id | 状態 ----- --------------------------- 111エラー 221承認済み
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'
これに伴う問題は、複数の決済レコードがあり、そのうちの1つが受け入れられた場合でも、承認レコードを返すことです。または、複数のERRORレコードがある場合、許可は2回返されます。
ステータスが「承認済み」の対応する決済レコードがない単一の承認レコードのみをフェッチするにはどうすればよいですか?ストレートSQLで可能ですか、それともコードで結果をフィルタリングする必要がありますか?