2015-03-27 2 views
0

У меня есть следующие 3 таблицы, которые я хотел бы запустить SQL-запрос, чтобы найти, какие узлы имеют все свои интерфейсы вниз ..., который из приведенной ниже таблицы является узлом x2, потому что (узел присутствует в таблице «outage», а количество интерфейсов равно 2 в таблице «отключение» и «интерфейс»).SQL Query - Nodes down

node 
id name 
1 x1 
2 x2 
3 x3 

outage 
id nodeid ip  duration 
1 1  1.1.1.1 1h 
2 2  2.2.2.1 2h 
2 2  2.2.2.2 2h 
3 3  3.3.3.1 5h 

interface 
id nodeid ip 
1 1  1.1.1.1 
1 1  1.1.1.2 
1 1  1.1.1.3 
2 2  2.2.2.1 
2 2  2.2.2.2 
3 3  3.3.3.1 
3 3  3.3.3.2 
3 3  3.3.3.3 
3 3  3.3.3.4 

Я попытался написать много запросов sql, но не смог. Я имею pesudocode в виду следующее:

, если «узел присутствует в ППР таблице» и если «счетчик интерфейсов в ППР таблицы = кол-интерфейсов в таблице интерфейсов то узел считается вниз , иначе узел либо вверх, либо один или несколько его интерфейсов опущены.

любая мысль или идея о том, как подойти к этой проблеме!

P.S. Использование PostgreSQL

+0

Какова цель столбца 'duration' в таблице' outage'? – joop

+0

, чтобы указать длительность интерфейса. Каждый интерфейс связан с IP-адресом. – Sinan

ответ

1

Самый простой способ сделать это - проверить, нет ли у узла интерфейса, который не работает.

SELECT * 
FROM node AS n 
WHERE 
    NOT EXISTS(
    SELECT * 
    FROM interface AS i 
    LEFT JOIN outage AS o 
     ON (i.nodeid,i.ip) = (o.nodeid,o.ip) 
    WHERE i.nodeid = n.id AND o.id IS NULL 
) 
+1

Спасибо, Якуб, за то, что ты смотрел на это. Мне просто нужно было уйти от того, как я думал об этом. Вы предложили другой подход. – Sinan