Отдельная запись из двух объединенных таблиц, одно «отдельное» поле, контрольная дата - PullRequest
3 голосов
/ 15 апреля 2011

Доступ 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 с самой последней записью из TableB на основе TableB.Date, если IDx = IDy создает дубликаты.

Надеюсь, это понятно.

Ответы [ 3 ]

3 голосов
/ 15 апреля 2011

Что-то вроде этого, вероятно, должно решить вашу проблему:

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 осуществляется через хитрое устройство, которое включает в себя присоединение TableB к себе и поиск строк, где для любого с учетом Date нет дат более (более поздних), чем это.

Оказывается, это в основном то же, что и решение Джона Гибба, только оно включает LEFT JOIN (второе) + WHERE key IS NULL вместо NOT EXISTS.

0 голосов
/ 15 апреля 2011

Основываясь на комментариях, попробуйте этот прерыватель связи, написанный как левое соединение.

select * 
from TableA a
 left join TableB b
   on b.idy = a.idx
  and b.date < a.date
where b.idy is null
0 голосов
/ 15 апреля 2011

Не уверен, что это будет работать в MS Access, но стоит попробовать:

SELECT TableA.IDx, TableA.Filename, TableB.Date, TableB.Name  
FROM TableA, TableB
WHERE TableA.Idx in (SELECT DISTINCT TableB.IDy FROM TableB)
...