の最大に基づいて複数の列を選択:IP識別子、IP、およびIPステータスとFQDNを含む、私は、次の3つのテーブル(簡体字)と11gデータベースがあり、Oracleの別の列
IPテーブルを。 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 |
+---------+-------------+
VLANとIPアドレスを関連付けるテーブル:実際のIP表中
+-------+---------+
| IP_ID | VLAN_ID |
+-------+---------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 2 |
+-------+---------+
、主キーでありますタプル(IP、IP_STATUS)。私の目標は、IP_STATUSを排除した新しいテーブルを作成することです。そのために、IPを集約し、VLAN_NUMBERが高いIPのID_IPとFQDNを取得したいと考えています。私は次のクエリを使用してIPを取得することができます
+-------+-------------+-----------+
| ID_IP | IP | FQDN |
+-------+-------------+-----------+
| 3 | 192.168.1.1 | test.com |
| 4 | 10.10.45.12 | test2.com |
+-------+-------------+-----------+
:SELECTクエリの答えは、このようなものになるだろう
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;
)
しかし、サブクエリが2つの値を返し、私は集約を行うには、最大(vlan.VLAN_IDを)必要があるので、それは、動作しません。
どうすれば適切なIP_IDを取得できますか?
ありがとうございました!
私が望んでいたまさに、ありがとうございました! – Cea33