次の構造のテーブルがあります。行の直前と直後のレコードの地区がその行の地区と異なるすべての行を返す必要があります。これは可能ですか?テーブル自体の結合を考えていましたが、その方法がわかりません。
id | zip_code | district
__________________________
20063 10169 12
20064 10169 9
20065 10169 12
次の構造のテーブルがあります。行の直前と直後のレコードの地区がその行の地区と異なるすべての行を返す必要があります。これは可能ですか?テーブル自体の結合を考えていましたが、その方法がわかりません。
id | zip_code | district
__________________________
20063 10169 12
20064 10169 9
20065 10169 12
「先行」と「後続」が 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 つの行はすべてその基準に適合することに注意してください。