是否可以编写查询以将行与同一表中的其他行进行比较?

时间:2013-08-11 23:52:08

标签: mysql

我有一个具有以下结构的表。我需要返回紧接在行之前和紧跟在行之后的记录区域与该行的区域不同的所有行。这可能吗?我正在考虑加入桌面本身,但不知道该怎么做。

id   | zip_code | district
__________________________
20063  10169       12
20064  10169        9
20065  10169       12

1 个答案:

答案 0 :(得分:4)

假设“前面”和“后面”在ID列的意义上,您可以这样做:

select * 
 from zip_codes z1
    inner join zip_codes z2 on z1.id=z2.id + 1
    inner join zip_codes z3 on z1.id=z3.id - 1
where z1.district <> z2.district and z1.district <> z3.district

这将自动过滤掉第一行和最后一行,因为inner join s,如果需要计算,请将其更改为left outer join

此外,还会检查它是否与两者不同。要查找它是否与其中任何一个不同(如评论中暗示的那样),请将and子句中的where更改为or。但请注意,那么,您的示例中的所有三行都符合该条件,即使这些行的上方和下方都有长行。