0

我正在使用一个访问数据库,并且我有一些像这样设置的表。

Table1(Table1Id, Field1, Field2, ...)
Table2(Table2Id, Table1Id, AuditDate, Field1, Field2, ...)

我正在尝试选择 Table1 中的每条记录,以及 Table2 中具有最新 AuditDate 的记录。如果表 2 中没有条目可以绑定到表 1,我只想填充表 1 中的一行内容和一堆空字段,表 2 中的数据将来自这些字段。这是我到目前为止的查询。

SELECT Table1.TableId, 
       Table1.Field1, 
       Table1.Field2, 
       Table2.Field1, 
       Table2.Field2 
FROM Table1 
LEFT OUTER JOIN Table2 ON Table1.TableId = Table2.Table1Id 
WHERE Table2.AuditDate = (SELECT MAX(AuditDate) FROM Table2 WHERE Table1.TableId = Table2.Table1Id)

这样做的问题是它只返回两条记录。Table2 中只有两个条目,但我希望它为 Table1 中的每条记录返回一行数据,而不仅仅是在 Table2 中找到匹配项的记录。

4

2 回答 2

3

问题是这一行:

WHERE Table2.AuditDate = ...

Table2在不存在条目的情况下,AuditDate将为 NULL。因此,您需要对此进行测试:

WHERE Table2.Table2Id IS NULL OR Table2.AuditDate = ...
于 2012-12-17T18:11:43.983 回答
0

猜猜如果您删除外部,您将获得表 1 中的每个条目。

编辑:但是如果您在表 2 中的条目比在表 1 中的条目更多,那么它仍然是一个问题。也许尝试完全加入?

于 2012-12-17T18:11:13.533 回答