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: