Re: Есть л

From: Mykola Dzham <i(at)levsha(dot)org(dot)ua>
To: vvislobokov(at)lukoilperm(dot)ru
Cc: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: Есть л
Date: 2005-07-04 14:37:20
Message-ID: 20050704143720.GO4355@expo.ukrweb.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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(at)jabber(dot)kiev(dot)ua

In response to

Browse pgsql-ru-general by date

  From Date Subject
Next Message Nick Gazaloff 2005-07-04 16:41:49 Re: Есть ли та
Previous Message Viktor Vislobokov 2005-07-04 10:09:49 Re: Есть ли та