Re: Есть л - Mailing list pgsql-ru-general

From Mykola Dzham
Subject Re: Есть л
Date
Msg-id 20050704143720.GO4355@expo.ukrweb.net
Whole thread Raw
In response to Re: Есть ли та  ("Viktor Vislobokov" <vvislobokov@parma-telecom.ru>)
List pgsql-ru-general
 Viktor Vislobokov wrote:
> >>Но мне бы хотелось сравнить значение именно со списком! КАК?
> >>
> >>
> >
> >А может это просто чрезмерное увлечение вложенными запросами? :)
> >
> >SELECT * FROM nets_tbl WHERE 'xxx.xxx.xxx.xxx' << net AND name='perm' ;
> >
> >
> >
> Вот что бывает, когда пытаешься упросить задачу для объяснения. ;)
> Всё сложнее, поэтому (на мой взгляд) и понадобился список. Я сильно
> упростил задачу, чтобы дать понять, что я хочу. В итоге получил более
> рациональное и правильное решение, но увы не применимое в моём случае, а
> только в том случае, который я описал.
>
> Ладно попробуем снова, теперь по полной программе:
> Есть таблица тафика:
> CREATE TABLE traffic_tbl (
> id              SERIAL          PRIMARY KEY,
> tdate           DATE,
> src_ip          INET            NOT NULL,
> src_port        INT,
> dst_ip          INET            NOT NULL,
> dst_port        INT,
> size            INT4            NOT NULL
> );
> где полный трафик
>
> Есть таблица сетей:
> CREATE TABLE nets_tbl (
> id              SERIAL          PRIMARY KEY,
> name            VARCHAR(40)     NOT NULL,
> net             INET            NOT NULL
> );
> В этой таблице есть ряд записей про пермские сети и ряд записей про IP
> адреса сетевых интерфейсов компьютера alpha
>
> Хочу получить данные о всём пермском трафике, исходящем с компьютера
> alpha по всем сетевым интерфейсам
> в некую таблицу results_tbl:
>
> INSERT INTO results_tbl (month, year, note, size)
> VALUES(4,2005,'Пермский исходящий трафик с alpha',
>   (SELECT sum(size) FROM traffic_tbl WHERE
>               src_ip IN (SELECT net FROM nets_tbl WHERE name='alpha') AND
>               dst_ip __________IN__________ (SELECT net FROM nets_tbl
> WHERE name='perm')));
>
> Вот там где ______IN________ очень бы хотелось сравнить со списком. Как
> сделать подругому - я не знаю, ибо не очень силён в SQL.

По моему если в таблице nets_tbl нет записей для которых name1 = name2 и
net1 << net2 , то этот запрос эквивалентен запросу

 INSERT INTO results_tbl (month, year, note, size)
 VALUES(4,2005,'Пермский исходящий трафик с alpha',
   (SELECT sum(size) FROM traffic_tbl, nets_tbl AS src_nets, nets_tbl AS dst_nets WHERE
               src_ip = src_nets.net AND src_nets.name='alpha' AND
               dst_ip << dst_nets.net  dst_nets.name='perm'));

Но в любом случае правильнее метить трафик на принадлежность к
определенной группе на этапе вставки его в базу, потому как сети могут
меняться.

--
Mykola Dzham, LEFT-(UANIC|RIPE)
JID: levsha@jabber.kiev.ua

pgsql-ru-general by date:

Previous
From: "Viktor Vislobokov"
Date:
Subject: Re: Есть ли та
Next
From: Nick Gazaloff
Date:
Subject: Re: Есть ли та