我有两个表:授权和结算。 '定居点'包含对授权的外键引用。筛选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