2

次の構造のテーブルがあります。行の直前と直後のレコードの地区がその行の地区と異なるすべての行を返す必要があります。これは可能ですか?テーブル自体の結合を考えていましたが、その方法がわかりません。

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

1 に答える 1

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ますleft outer join

また、これは両方と異なるかどうかをチェックします。(コメントで暗示されているように)どちらとも異なるかどうかを確認するにandは、where句の をに変更しorます。ただし、これらの行の上下に 12 の長い行がある場合でも、例の 3 つの行はすべてその基準に適合することに注意してください。

于 2013-08-11T23:58:47.203 に答える