获取最新的SQL查询说明

时间:2014-02-19 22:25:15

标签: sql

我从这个帖子Retrieving the last record in each group中偷了这个查询:

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 个答案:

答案 0 :(得分: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条款。