У меня проблема с SQLite. У меня есть база данных, содержащая 5 таблиц.
Таблица 1: сканы Столбцы: scan_id и scandate
Таблица 2: системы Столбцы: system_id, ip, dns ..
Таблица 3 : порты Столбцы: port_id, протокол, порт, сервис
Таблица 4: столбцы плагинов: plugin_id, PluginName, описание
Таблица 5: карты Столбцы: map_id, scan_id, system_id, port_id, plugin_id
Таким образом, в одной системе может быть много портов, а в одном порте может быть зарегистрировано от одного до нескольких плагинов. Теперь я хотел бы получить следующее: за последний день сканирования
`system_IP, protocol, port, service and all plugins identified on that systems port`
В данный момент я застрял в этой команде:
`SELECT system_IP, protocol, port, service, PluginName FROM maps
INNER JOIN scans ON (maps.scan_id = scans.scan_id)
INNER JOIN systems ON (maps.system_id = systems.system_id)
INNER JOIN ports ON (maps.ports_id = ports.ports_id)
INNER JOIN plugins ON (maps.plugin_id = plugins.plugin_id)
WHERE scan_id=1`
результат равен:
`123.456.789.1, TCP, 22, SSH, Plugin1
123.456.789.1, TCP, 80, HTTP, Plugin2
123.456.789.1, TCP, 80, HTTP, Plugin3`
Я хотел бы получить следующее:
`123.456.789.1, TCP, 22, SSH, Plugin1
123.456.789.1, TCP, 80, HTTP, Plugin2, Plugin3, Plugin4
123.456.789.1, TCP, 443, SSH, Plugin3`
Как мне это сделать?
РЕДАКТИРОВАТЬ: Пример данных:
Table 1: scans
scan_id | scan_date
1 2.2020
2 3.2020
Table 2: systems
system_id | ip | dns
1 123.456.789.1 one.dns.com
2 123.456.789.2 two.dns.com
Table 3: ports
port_id | protocol | port | service
1 tcp 22 ssh
2 udp 161 smtp
3 tcp 80 http
Table 4: plugins
plugin_id | pluginname | plugindescription
1 1234567890 Beschreibung1
2 2345678901 Beschreibung2
Table 5: maps
maps_id | system_id | port_id | plugin_id | scan_id
1 1 1 1 1
2 1 3 1 1
3 1 3 2 1
4 1 3 3 1
5 2 2 1 1
6 2 2 2 1
7 2 2 3 1
8 1 1 1 2
...
Надеюсь, это поможет прояснить ситуацию.