0

アクセスデータベースを使用していて、このようにいくつかのテーブルを設定しています。

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)

これに伴う問題は、2つのレコードしか返さないことです。Table2には2つのエントリしかありませんが、Table2で一致するものだけでなく、Table1のすべてのレコードのデータの行を返すようにします。

4

2 に答える 2

3

問題は次の行です。

WHERE Table2.AuditDate = ...

Table2エントリが存在しない場合はAuditDateNULL になります。したがって、それをテストする必要があります。

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

外側を削除すると、テーブル 1 からすべてのエントリが取得されると思います。

編集: ただし、表 1 よりも表 2 に多くのエントリがある場合は、依然として問題になります。Full JOIN を試してみませんか?

于 2012-12-17T18:11:13.533 に答える