Доступ 2007
TableA
IDx Filename
TableB
IDy Date Name
У таблиці В є більше полів, але це має працювати.
IDy не унікальна, може мати копії. IDx унікальний, копій немає.
З чого я почав:
SELECT TableA.IDx, TableA.Filename, TableB.Date, TableB.Name
FROM TableA LEFT JOIN TableB ON TableA.IDx = TableB.IDy
Куди я намагаюся дістатися:
(Як сказано в іншому моєму питанні, в яке я вірюбув надто загальним, щоб відповісти про наміри. Я не зміг перетворити обрану відповідь на роботу з двома таблицями і не зміг додати коментар у відведений простір, щоб повторно задати питання більш детально.)
Список різних записів на основі TableA.ID з найбільш актуальним записом з TableB на основі TableB.Date, якщо IDx = IDy створює дублікати.
Сподіваюся, це зрозуміло.
Відповіді:
3 для відповіді № 1Щось подібне, ймовірно, повинно вирішити вашу проблему:
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
.
0 для відповіді № 2
Не впевнений, чи це буде працювати в MS Access, але варто спробувати:
SELECT TableA.IDx, TableA.Filename, TableB.Date, TableB.Name
FROM TableA, TableB
WHERE TableA.Idx in (SELECT DISTINCT TableB.IDy FROM TableB)
0 для відповіді № 3
На основі коментарів спробуйте цей вимикач для краватки, написаний як приєднання зліва.
select *
from TableA a
left join TableB b
on b.idy = a.idx
and b.date < a.date
where b.idy is null