私はmysqlを初めて使っていて、それを研究しようとしましたが、解決策は見つかりませんでした。私はこのようなテーブルを持っています:関連するデータの2行を1にマージする方法
| SW_Pair1 | SW_Pair2 | Pair1_VLAN1| Pair1_VLAN2| Pair2_VLAN1| Pair2_VLAN2| Inter | Mgmt| OSPF| Env | Domain|
|-----------------|-----------------|------------|------------|------------|------------|-------|-----|-----|-----|-------|
| Switch1.abc.com | Switch2.abc.com | VLAN-111 | VLAN-333 | Unknown | Unknown | 47 | 24 | 0.1 | Dev | abc |
| Switch2.abc.com | Switch1.abc.com | VLAN-222 | VLAN-444 | Unknown | Unknown | 47 | 24 | 0.1 | Dev | abc |
| Switch3.abc.com | Switch4.abc.com | VLAN-121 | VLAN-123 | Unknown | Unknown | 47 | 24 | 0.1 | Dev | abc |
| Switch4.abc.com | Switch3.abc.com | VLAN-515 | VLAN-717 | Unknown | Unknown | 47 | 24 | 0.1 | Dev | abc |
| Switch5.abc.com | Switch6.abc.com | VLAN-919 | VLAN-101 | Unknown | Unknown | 47 | 24 | 0.1 | Dev | abc |
| Switch6.abc.com | Switch5.abc.com | VLAN-105 | VLAN-108 | Unknown | Unknown | 47 | 24 | 0.1 | Dev | abc |
| Switch7.abc.com | Switch8.abc.com | VLAN-110 | VLAN-115 | Unknown | Unknown | 47 | 24 | 0.1 | Dev | abc |
| Switch8.abc.com | Switch7.abc.com | VLAN-199 | VLAN-200 | Unknown | Unknown | 47 | 24 | 0.1 | Dev | abc |
最初の2行を例にとります。行1
の行で
SW_Pair1行2 == SW_Pair2の行2 SW_Pair1で1 == SW_Pair2私は次の行に入れますが、彼らは、データベース内の任意の場所にすることができます。ここでは、2行目のPair1_VLAN1とPair1_VLAN2のデータが1行目のPair2_VLAN1とPair2_VLAN2に入り、2行目が消えるようにこれらの2つをマージしたいと考えています。私はSQLにデータをプッシュするのpython 2.7を使用しています
| SW_Pair1 | SW_Pair2 | Pair1_VLAN1| Pair1_VLAN2| Pair2_VLAN1| Pair2_VLAN2| Inter | Mgmt| OSPF| Env | Domain|
|-----------------|-----------------|------------|------------|------------|------------|-------|-----|-----|-----|-------|
| Switch1.abc.com | Switch2.abc.com | VLAN-111 | VLAN-333 | VLAN-222 | VLAN-444 | 47 | 24 | 0.1 | Dev | abc |
| Switch3.abc.com | Switch4.abc.com | VLAN-121 | VLAN-123 | VLAN-515 | VLAN-717 | 47 | 24 | 0.1 | Dev | abc |
など..
:だから、ここの表は、マージ後にどのように見えるべきかです。
編集:
私はDELETEの上に追加のチェックを追加するために、クエリの下にしようとしたが、それは失敗しました:
UPDATE yourTable AS a
DELETE FROM yourTable AS b ON a.SW_Pair1 = b.SW_Pair2 AND a.SW_Pair2 = b.SW_Pair1
WHERE Pair2_VLAN1 IS Unknown;
以上、それは後の第2スイッチのPair1_VLAN1とPair1_VLAN2行の値を設定することができますスイッチ1にデータを移動しますか?おそらく、 "MERGED"のようなものにVLANを上書きするでしょう。私は安全にPair1_VLAN1とPair1_VLAN2に "MERGED"を持つものをすべて削除できます。私はそれがデータが正常に別の行に移動されたときだけそれが言うことを知っている。
EDIT2:
NVMは...それを考え出しました。以下を参照してください:
UPDATE yourTable AS a
JOIN yourTable AS b ON a.SW_Pair1 = b.SW_Pair2 AND a.SW_Pair2 = b.SW_Pair1
SET a.Pair2_VLAN1 = b.Pair1_VLAN1,
a.Pair2_VLAN2 = b.Pair1_VLAN2,
b.Pair1_VLAN1 = "MERGED",
b.Pair1_VLAN2 = "MERGED
WHERE a.SW_Pair1 < a.SW_Pair2;
マージされたデータを表示したいだけですか、実際にマージされたデータをテーブルに保存したいのですか? –
それを保存し、他の行を削除します。 – Damon