我有兩個表:授權和結算。 '定居點'包含對授權的外鍵引用。篩選LEFT JOIN結果
結算也可以有一個狀態(錯誤,接受等)。
鑑於這樣的數據:
Authorizations Settlements id id | auth_id | status ----- --------------------------- 1 1 1 ERROR 2 2 1 ACCEPTED
我想寫一個SQL查詢來發現,沒有一個公認的結算記錄所有授權。我嘗試了一個左外連接,但它返回太多行。例如:
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記錄,授權將返回兩次。
我怎樣才能取得單一授權記錄沒有相應的結算記錄狀態爲「ACCEPTED」?是否可以使用直接SQL,還是必須在我的代碼中過濾結果?
+1打我的頭髮 – 2009-08-10 17:30:35
謝謝!這工作完美。 – MikeQ 2009-08-10 18:39:16