アクセス2007
TableA
IDx Filename
TableB
IDy Date Name
テーブルBにはもっとフィールドがありますが、これでうまくいくはずです。
IDyは一意ではなく、重複する可能性があります。 IDxは一意で重複しません。
私が始めたもの:
SELECT TableA.IDx, TableA.Filename, TableB.Date, TableB.Name
FROM TableA LEFT JOIN TableB ON TableA.IDx = TableB.IDy
私が行こうとしているところ:
(私の他の質問で述べたように、私は信じていますその意図に答えるにはあまりにも一般的でした。選出された回答を2つの表を処理するように変換することはできず、割り当てられたスペースにコメントを追加してより詳細に質問することはできませんでした。
IDx = IDyの場合、TableB.Dateに基づいてTableBからの最新のレコードを含むTableA.IDに基づいた個別のレコードのリストが重複します。
これが理解できることを願っています。
回答:
回答№1の場合は3このような何かはおそらくあなたの問題を解決するはずです:
SELECT a.IDx, a.Filename, b1.Date, b1.Name
FROM ((TableA AS a)
LEFT JOIN TableB AS b1 ON a.IDx = b1.IDy)
LEFT JOIN TableB AS b2 ON b1.IDy = b2.IDy AND b1.Date < b2.Date
WHERE b2.IDy IS NULL
の出力を制限する TableB
最新の行だけに Date
すべてのs IDy
参加を含む巧妙なデバイスを介して行われます TableB
自分自身に戻り、与えられた行を探します Date
それより後の日付はありません。
結局のところ、それは "基本的にジョンギブの解決策と同じです、それだけが含まれ LEFT JOIN
(二番目)+ WHERE key IS NULL
の代わりに NOT EXISTS
.
回答№2の場合は0
これがMS Accessで機能するかどうかはわからないが、試してみる価値がある
SELECT TableA.IDx, TableA.Filename, TableB.Date, TableB.Name
FROM TableA, TableB
WHERE TableA.Idx in (SELECT DISTINCT TableB.IDy FROM TableB)
回答№3の場合は0
コメントに基づいて、左結合として書かれたこのタイブレーカーを試してみてください。
select *
from TableA a
left join TableB b
on b.idy = a.idx
and b.date < a.date
where b.idy is null