2013-08-11 7 views
2

У меня есть таблица со следующей структурой. Мне нужно вернуть все строки, где район записи, непосредственно предшествующий и непосредственно следующий за строкой, отличается от района для этого ряда. Это возможно? Я думал о соединении на столе, но не знал, как это сделать.Можно ли написать запрос для сравнения строк с другими строками в одной таблице?

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

Возможный дубликат [Сравнить строки в одной таблице в mysql] (http://stackoverflow.com/questions/13244136/compare-rows-in-same-table-in-mysql) – Paul

+0

Поле id является основным полем , Возможно, я не объяснил это хорошо. Я хочу сравнить 9 в районной колонке с 12 до нее и после нее. Если он отличается от (или в данном случае), он вернет эту строку (строка 2064 в этом случае). – Brian

ответ

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. Но обратите внимание, что тогда все три строки в вашем примере соответствуют этим критериям, даже если есть длинные строки twelves выше и ниже этих строк.

+0

Что означает '<>'? –

+0

Это оператор неравенства, определенный в стандарте SQL. Однако большинство серверов баз данных (включая MySQL) также реализуют оператор '! =' С той же семантикой. – SWeko

+0

А, ухо. Спасибо! –

Смежные вопросы