我知道这很傻,但是有谁能帮助我理解这个连接查询在elaboractive描述中做了什么?
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
我知道这很愚蠢,但我需要继续我的进一步需要。。。请帮帮我。。。
最佳答案
与Left Join
结合使用的j2.id IS NULL
只返回那些j1
行,其中找不到j2
行。
由于条件是j1.changedone < j2.changedone
,因此它只返回每个changedone
中trackid
最高的行(如果achangedone
中有多个行的此值为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
。