我知道这很傻,但是有谁能帮助我理解这个连接查询在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,因此它只返回每个changedonetrackid最高的行(如果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

08-18 14:58