左外加入获取所有行?

时间:2012-12-17 18:08:14

标签: sql ms-access join

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

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

我正在尝试选择Table1中的每个记录,并使用最新的AuditDate选择Table2中的记录。如果Table2中没有条目可以重新绑定到Table1中,我只想填充Table1中的一行以及Table2中的数据来自的一堆空字段。这是我到目前为止的查询。

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中找到匹配的那一个。

2 个答案:

答案 0 :(得分:3)

问题在于这一行:

WHERE Table2.AuditDate = ...

如果不存在Table2条目,AuditDate将为NULL。所以你需要测试一下:

WHERE Table2.Table2Id IS NULL OR Table2.AuditDate = ...

答案 1 :(得分:0)

猜测如果你移除外部,你将从表1中获得每个条目。

编辑:但如果表2中的条目多于表1中的条目,则仍然存在问题。 也许试试Full JOIN?