2014-02-19 56 views
1

我偷了下面這個查詢從這個線程Retrieving the last record in each group獲取最新的SQL查詢澄清

SELECT m1.* 
FROM messages m1 LEFT JOIN messages m2 
ON (m1.name = m2.name AND m1.id < m2.id) 
WHERE m2.id IS NULL; 

可能有人請幫助我瞭解如何AND m1.id < m2.id返回正確的結果/我想這應該是AND m1.id > m2.id不返回正確的結果。

我有點想知道技術上id應該更大。

回答

1

你正在尋找不加入的實例,給出WHERE m2.id IS NULL

考慮以下對ID的的:

m1_id m2_id 
1  1 
2  2 
3  3 

使用m1.id < m2.id沒有你WHERE標準讓你:

m1_id m2_id 
1  2 
1  3 
2  3 
3  NULL 
  • 1不小於1,但小於2 3,所以1加入多個記錄。
  • 2不小於1或2,但小於3,所以2加入到1 記錄。
  • 3不小於任何記錄,所以它不加入。它 返回NULL這是您在您的 WHERE條款中尋找的標準。
+0

好的謝謝你。 –