у меня есть и базы данных 11g Oracle со следующими тремя таблицами (упрощенно):Выберите несколько столбцов на основе макс другого столбца
IP Table, содержащий идентификатор IP, то IP, и статус IP и FQDN. IP-адреса могут повторяться.
+-------+-------------+-----------+-----------+
| ID_IP | IP | IP_STATUS | FQDN |
+-------+-------------+-----------+-----------+
| 1 | 192.168.1.1 | 1 | test.com |
| 2 | 192.168.1.1 | 2 | test.com |
| 3 | 192.168.1.1 | 3 | test.com |
| 4 | 10.10.45.12 | 2 | test2.com |
+-------+-------------+-----------+-----------+
таблицы VLAN, содержащие и идентификатор VLAN и VLAN номер
+---------+-------------+
| VLAN_ID | VLAN_NUMBER |
+---------+-------------+
| 1 | 3 |
| 2 | 5 |
| 3 | 7 |
+---------+-------------+
A Таблица соотнесения виртуальных локальных сетей и IP-адреса:
+-------+---------+
| IP_ID | VLAN_ID |
+-------+---------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 2 |
+-------+---------+
В реальной таблице IP, первичный ключ является кортеж (IP, IP_STATUS). Моя цель - создать новую таблицу, исключающую IP_STATUS, и для этого я хочу агрегировать IP-адреса и получить ID_IP и FQDN IP-адреса, значение VLAN_NUMBER выше. Ответ на запрос SELECT, будет что-то вроде этого:
+-------+-------------+-----------+
| ID_IP | IP | FQDN |
+-------+-------------+-----------+
| 3 | 192.168.1.1 | test.com |
| 4 | 10.10.45.12 | test2.com |
+-------+-------------+-----------+
я могу получить IP-адрес с помощью следующего запроса:
SELECT i.IP, max(v.VLAN_ID)
FROM IPS i
LEFT JOIN VLAN_IP_REL v_i ON i.ID_IP=v_i.ID_IP
LEFT JOIN VLANS v ON v_i.ID_VLAN=v.ID_INSTANCIA
GROUP BY i.IP;
То, что я не знаю, как получить другие столбцы. Я попытался с помощью подзапроса, как следующее:
SELECT i.ID_IP, i.IP, i.FQDN
FROM IPS i
WHERE i.IP IN (
SELECT i.IP, max(v.VLAN_ID)
FROM IPS i
LEFT JOIN VLAN_IP_REL v_i ON i.ID_IP=v_i.ID_IP
LEFT JOIN VLANS v ON v_i.ID_VLAN=v.ID_INSTANCIA
GROUP BY i.IP;
)
Но это не работает, так как подзапрос возвращает два значения, и мне нужен максимум (vlan.VLAN_ID), чтобы сделать агрегацию.
Как я могу получить IP_ID?
Спасибо!
Именно то, что я хотел, спасибо! – Cea33