Базовое понимание запросов на присоединение - PullRequest
1 голос
/ 10 мая 2010

Я знаю это очень глупо, но кто-нибудь может мне помочь понять, что делает этот запрос на присоединение в подробном описании?

SELECT j1.*
FROM jos_audittrail j1
LEFT OUTER JOIN jos_audittrail j2
   ON (j1.trackid = j2.trackid AND j1.field = j2.field AND j1.changedone < j2.changedone)
WHERE j1.operation = 'UPDATE'
  AND j1.trackid=$t_ids[$n]
  AND j2.id IS NULL

Я знаю, это очень глупо, но мне нужно идти дальше с моей дальнейшей потребностью ... Пожалуйста, помогите мне ...

1 Ответ

2 голосов
/ 10 мая 2010

Left Join в сочетании с j2.id IS NULL возвращает только те строки j1, где не может быть найдена строка j2.

Поскольку условие j1.changedone < j2.changedone, он возвращает только строки с наибольшим changedone на trackid (если существует более одной строки с этим значением changedone для trackid, все возвращаются).


Так что, если у вас есть

trackid  changedone
      1           1
      1           2
      2           1

Вы получите

trackid  changedone
      1           2
      2           1

, поскольку для 1 - 1 Left Join находит запись (1 - 2), поэтому j2.id равно NOT NULL.

...