SQL-запрос - узлы вниз

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

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, но не удалось. Я имею в виду псевдокод в следующем:

если "узел присутствует в таблице сбоев" и если "количество интерфейсов в таблице сбоев = количество интерфейсов в таблице интерфейсов, то узел считается неработающим. иначе узел либо работает, либо один или многие из его интерфейсов не работают.

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

PS Использование PostgreSQL

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
  )
Другие вопросы по тегам