Access 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
我想去的地方:
(正如我在另一个问题中所述,我认为这个问题过于通用而无法回答意图。我无法将选定的答案转换为使用两个表格,并且无法在分配的空间中添加注释以更详细地重新提问。)
基于TableA.ID的不同记录列表,如果IDx = IDy,则基于TableB.Date从TableB获得最新记录.Date产生重复项。
我希望这是可以理解的。
答案 0 :(得分: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
个IDy
s的行,这是通过一个狡猾的设备完成的,这需要将TableB
加入自身并且搜索任何给定Date
的行,其中没有比(更晚)更大的日期。
事实证明,它与John Gibb的解决方案基本相同,只涉及LEFT JOIN
(第二个)+ WHERE key IS NULL
而不是NOT EXISTS
。
答案 1 :(得分: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)
答案 2 :(得分:0)
根据评论,尝试将此连接断路器写为左连接。
select *
from TableA a
left join TableB b
on b.idy = a.idx
and b.date < a.date
where b.idy is null