2010-05-10 4 views
1

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

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 

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

ответ

2

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 - 1Left Join находит запись (1 - 2), так j2.id является NOT NULL.

+0

Это означает, что если у меня есть несколько значений треки 1 и 2, то оба они будут отображаться в соответствии с максимальным значением changeone, а затем меньше, чем и так далее ??? –

+1

@OM: Не знаю, насколько я понимаю ваш комментарий. Пока 'changedone' является уникальным для' trackid', вы получите только одну строку на 'trackid', которая имеет наибольшее значение' changedone'. –

+0

ok grt То, что я хотел знать –

Смежные вопросы