Сделайте SQL-запрос к трем таблицам с предложением NOT-LIKE

Мне нужно извлечь все серверы, которые не входят в указанную группу. У меня есть 3 таблицы: host (содержащая хосты), hostgroup_relation (содержащая идентификатор хоста и идентификатор группы хостов), hostgroup (содержащая группы хостов)

Я могу получить отношения, но мне нужны все хосты, которые НЕ являются членами группы с идентификатором 180.

Хозяин:

SELECT host_id,host_name FROM host LIMIT 10;
+---------+-------------------+
| host_id | host_name         |
+---------+-------------------+
|    1482 | AADSYNC1          |
|     442 | Acces-Point-Wifi  |
|    1916 | ADAUDIT1          |
|    1562 | ADMORA1           |
|    2247 | ADMRDS2           |
|    2226 | ADSECU1           |
|    1203 | ADSELFSERVICE1    |
|    1172 | ALFRESCO1         |
|    1841 | ALFRESCO2         |
|     172 | Antispam-Ironport |
+---------+-------------------+

Хост-группы:

SELECT hg_id, hg_name FROM hostgroup LIMIT 10
+-------+----------------------+
| hg_id | hg_name              |
+-------+----------------------+
|    82 | Antivirus-Trend      |
|    65 | Autocoms             |
|    72 | Baies-de-stockage    |
|    78 | Consoles             |
|   192 | Databases-All        |
|   193 | Databases-Main       |
|    68 | Databases-MySql      |
|    67 | Databases-Oracle     |
|   181 | Databases-PostgreSql |
|    69 | Databases-SQLServer  |
+-------+----------------------+

Отношение хоста/группы хостов:

SELECT * FROM hostgroup_relation LIMIT 10;
+--------+-----------------+--------------+
| hgr_id | hostgroup_hg_id | host_host_id |
+--------+-----------------+--------------+
|   5698 |              70 |         1167 |
|   6772 |              53 |         1167 |
|   6820 |             144 |         1369 |
|   6821 |              62 |         1369 |
|   6822 |              53 |         1369 |
|   6823 |              70 |         1369 |
|   6825 |              62 |         1370 |
|   6826 |              53 |         1370 |
|   6827 |              70 |         1370 |
|   6829 |              62 |         1371 |
+--------+-----------------+--------------+

Вот где я зашел так далеко:

SELECT host.host_name, hostgroup.hg_name
FROM host, hostgroup_relation, hostgroup
WHERE hostgroup_relation.hostgroup_hg_id = hostgroup.hg_id
    AND hostgroup_relation.host_host_id = host.host_id
LIMIT 10;
+-----------+-----------------------------+
| host_name | hg_name                     |
+-----------+-----------------------------+
| AADSYNC1  | Default-bi                  |
| AADSYNC1  | Serveurs-Virtuels           |
| AADSYNC1  | Serveurs-Windows            |
| AADSYNC1  | Reboot_serveurs-12h00:14h00 |
| ADAUDIT1  | Default-bi                  |
| ADAUDIT1  | Serveurs-Virtuels           |
| ADAUDIT1  | Serveurs-Windows            |
| ADAUDIT1  | Reboot_serveurs-12h00:14h00 |
| ADMORA1   | Default-bi                  |
| ADMORA1   | Reboot_serveurs-00h00:4h00  |
+-----------+-----------------------------+

И мне нужен список всех серверов, не входящих в указанную группу.

пожалуйста, добавьте ожидаемый результат

Adirmola 08.04.2019 17:02

Извините за это, совсем забыл. Мне просто нужно имя хоста.

Sethnico 09.04.2019 10:19
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
2
23
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуй это:

    select h.host_id, hg.host_name, hg.hg_id
    from host h
    join hostgroup_relation hg
    where h.host_id = hg.host_host_id
    and hg_id not in 180;
Ответ принят как подходящий

Вам нужно сделать простое соединение.

Это может сработать:

SELECT h.host_id, h.host_name
FROM host h
LEFT OUTER JOIN hostgroup_relation hgr ON (hgr.host_host_id = h.host_id AND hgr.hostgroup_hg_id = 180)
WHERE hgr.hgr_id IS NULL

Другие вопросы по теме