а как найти адрес который не принадлежит сети? тип inet.

Maxik

Новичок
а как найти адрес который не принадлежит сети? тип inet.

Есть таблица t1, в ней два поля saddr и daddr, соответствено исходящий и входящий адрес.
и есть таблица t2 в которой список подсетей net.
Вот запрос:

select a.saddr, a.daddr
from t1 as a, t2 as b
where a.saddr >>= t2.net AND NOT a.daddr >>=t2.net


но все равно выбирает строки которые содержат daddr состоящий в подсетях net.
Я понимаю что можно сделать через подзапросы., но ведь такой вариант тоже должен работать.

Postgres 7.3.4
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
скажи словами, что должен делать запрос.

сейчас он показывает список всех записей, у которых saddr и daddr не находятся в одной подсети. при этом проверяются все подсети.

кроме того, удивляет, что в FROM таблица t2 с псевдонимом, а в WHERE --- без.
 

Maxik

Новичок
Автор оригинала: Sad Spirit
скажи словами, что должен делать запрос.

сейчас он показывает список всех записей, у которых saddr и daddr не находятся в одной подсети. при этом проверяются все подсети.

кроме того, удивляет, что в FROM таблица t2 с псевдонимом, а в WHERE --- без.
вот это как раз и должен делать, но не делает!!! saddr действительно нет, а от daddr полно в результате запроса. И я нефига не понимаю почему.
Кстати на самом деле запрос выглядит так:

select a.saddr, a.daddr
from t1 as a, t2 as b
where a.saddr <<= b.net AND NOT a.daddr <<=b.net

я нифига не понимаю почему так происходит. Даже фунекция сделал которая проверяет содержится ли адрес в подсети и вставил ее вместо вторго условия where, но пофигу, все равно daddr которые содержатся в подсетях есть в результате запроса.

(where это я ощибся, офигел уже тут)
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
ещё раз: щас запрос выбирает записи где daddr не содержится хотя бы в одной из подсетей из t2. если тебе нужно, чтобы он выбирал daddr не попадающий ни в одну из подсетей, то юзай подзапрос, примерно так:
Код:
WHERE ... AND NOT EXISTS (
  SELECT s.net
  FROM t2 AS s
  WHERE a.daddr <<= s.net
)
 

Maxik

Новичок
с подзапросом понятно, но почему не работет так как я написал?
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Maxik
...но почему не работет так как я написал?
специально, блин, для тебя жирным выделил.

понимаешь разницу между "не содержится ни в одной" и "не содержится хотя бы в одной"? если нет --- в морг.
 

Maxik

Новичок
можно было и без наездов, ведь не все такие умные как вы.
 
Сверху