2010-05-10 46 views
1

我知道這非常愚蠢,但任何人都可以幫助我理解此連接查詢在elabortive描述中做了什麼?基本連接查詢理解

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 

我知道它很愚蠢,但我需要我的進一步需要繼續前進......請你幫我...

回答

2

結合的Left Joinj2.id IS NULL只返回j1那些行,沒有找到j2的行。

由於條件j1.changedone < j2.changedone,它只返回每trackid最高changedone行(如果有多個行與一個trackidchangedone這個值,所有的人都返回)。


所以,如果你有

trackid changedone 
     1   1 
     1   2 
     2   1 

你會得到

trackid changedone 
     1   2 
     2   1 

因爲對於1 - 1Left Join找到記錄(1 - 2),所以j2.idNOT NULL

+0

這意味着如果我有多個trackid 1和2的值,那麼它們將按照最大改變的值首先顯示,然後小於那麼等等。 – 2010-05-10 06:11:26

+1

@OM:不知道我是否理解你的評論。只要'每個trackid''changedone'是唯一的,每個'trackid'只會得到一行,'changedone'的值最高。 – 2010-05-10 06:13:30

+0

ok grt那就是我想知道的 – 2010-05-10 06:21:56