Skip site navigation (1) Skip section navigation (2)

Есть ли такая возможность

From: "Viktor Vislobokov" <vvislobokov(at)parma-telecom(dot)ru>
To: pgsql-ru-general(at)postgresql(dot)org
Subject: Есть ли такая возможность
Date: 2005-07-04 09:01:57
Message-ID: 42C8FB05.3020107@lukoilperm.ru (view raw or flat)
Thread:
Lists: pgsql-ru-general
Привет всем.
Есть ли возможность по сетевому типу inet проверить вхождение адреса для 
СПИСКА значений inet?
Т.е.

есть некий IP адрес: xxx.xxx.xxx.xxx

Есть также таблица сетей

CREATE TABLE nets_tbl (
id        SERIAL   PRIMARY KEY,
netname   CHAR(10),
net       INET   UNIQUE
);

в которой забито несколько значений например:
SELECT * FROM nets_tbl;
 id |  name  |       net
----+--------+------------------
 13 | perm   | 195.222.128.0/19
 14 | perm   | 62.16.32.0/19
 15 | perm   | 195.42.134.0/24

Мне надо сделать запрос, который бы позволил мне сказать, входит ли IP 
адрес xxx.xxx.xxx.xxx в любую из сетей, которая соответствует имени 'perm'.

Напрашивается такой вариант:
SELECT * FROM nets_tbl WHERE 'xxx.xxx.xxx.xxx' IN (SELECT net FROM 
nets_tbl WHERE name='perm');

Однако, такой запрос всегда будет выдавать 0 записей, т.е. совпадения 
никогда не будет, если только значение в поле net не точно такое же как 
и у xxx.xxx.xxx.xxx. Это вроде бы понятно почему - надо сравнение делать 
с помощью функций, предназначенных для этого типа. Ищу такую функцию и 
нахожу "<<", но она работает только для единичных значений, т.е.

SELECT * FROM nets_tbl WHERE 'xxx.xxx.xxx.xxx' << (SELECT net FROM 
nets_tbl WHERE id=13);

работать будет, а вот:

SELECT * FROM nets_tbl WHERE 'xxx.xxx.xxx.xxx' << (SELECT net FROM 
nets_tbl WHERE name='perm');

нет, потому что:
ERROR:  more than one row returned by a subquery used as an expression

Но мне бы хотелось сравнить значение именно со списком! КАК?

-- 
С уважением, Виктор



Responses

pgsql-ru-general by date

Next:From: Mykola DzhamDate: 2005-07-04 09:15:46
Subject: Re: Есть л
Previous:From: Denis A. EgorovDate: 2005-07-01 18:31:20
Subject: Re: Dump и

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group