我正在使用访问数据库,我有一些像这样设置的表。
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中找到匹配的那一个。
答案 0 :(得分:3)
问题在于这一行:
WHERE Table2.AuditDate = ...
如果不存在Table2
条目,AuditDate
将为NULL。所以你需要测试一下:
WHERE Table2.Table2Id IS NULL OR Table2.AuditDate = ...
答案 1 :(得分:0)
猜测如果你移除外部,你将从表1中获得每个条目。
编辑:但如果表2中的条目多于表1中的条目,则仍然存在问题。 也许试试Full JOIN?