2017-05-08 1 views
0

Tabellenschema:Wie legen Sie die Spaltenwerte einiger Zeilen genauso wie die anderen in derselben Tabelle fest?

+----------------------+---------------+------+-----+---------+-------+ 
| Field    | Type   | Null | Key | Default | Extra | 
+----------------------+---------------+------+-----+---------+-------+ 
| name     | varchar(10) | YES | MUL | NULL |  | 
| slno     | varchar(20) | YES |  | NULL |  | 
| type     | int(2)  | YES |  | NULL |  | 
| details    | text   | YES |  | NULL |  | 
+----------------------+---------------+------+-----+---------+-------+ 

Name, slno und geben Sie bilden zusammen einen Schlüssel.

Beispieldaten:

+---------+------+------+-------------------------------+ 
| name | slno | type | details      | 
+---------+------+------+-------------------------------+ 
| name1 | 11 | 1 | {"data":["feats1","feats2"] } | 
| name1 | 11 | 2 | {"data":["feats1","feats2"] } | 
| name1 | 12 | 1 | {"data":["feats5","feats6"] } | 
| name1 | 12 | 2 | {"data":["feats5","feats6"] } | 
| name2 | 11 | 1 | {"data":["feats3","feats4"] } | 
| name2 | 11 | 2 | {"data":["feats3","feats4"] } | 
| name2 | 12 | 1 | {"data":["feats7","feats8"] } | 
| name2 | 12 | 2 | {"data":["feats10"] }   | 
+---------+------+------+-------------------------------+ 

Also im Grunde für jeden Eintrag mit dem Namen 'name1', gibt es einen ähnlichen Eintrag mit demselben slno aber mit name = 'name2'.
Was ich tun möchte, ist Details für Zeilen mit gleichen SLNO und Typ, aber anderen Namen, d. H. Oben Beispiel Datensatz wie unten gesetzt werden. name2 die Details der Zeilen sollten übereinstimmen name1 Zeilen Details, wenn sie gleiche slno und Typ haben.

+---------+------+------+-------------------------------+ 
| name | slno | type | details      | 
+---------+------+------+-------------------------------+ 
| name1 | 11 | 1 | {"data":["feats1","feats2"] } | 
| name1 | 11 | 2 | {"data":["feats1","feats2"] } | 
| name1 | 12 | 1 | {"data":["feats5","feats6"] } | 
| name1 | 12 | 2 | {"data":["feats5","feats6"] } | 
| name2 | 11 | 1 | {"data":["feats1","feats2"] } | 
| name2 | 11 | 2 | {"data":["feats1","feats2"] } | 
| name2 | 12 | 1 | {"data":["feats5","feats6"] } | 
| name2 | 12 | 2 | {"data":["feats5","feats6"] } | 
+---------+------+------+-------------------------------+ 

Ich versuchte, aber konnte nicht mit einem Befehl kommen, um das obige Ergebnis auszuführen. Kann mir bitte jemand helfen?

+0

Also slno und Details sollten eine separate Tabelle bilden? – Strawberry

+0

Nein, ich gab die Beispieldaten (2. Tabelle) und wie sie darunter transformiert werden sollten (letzte Tabelle) – user3248186

+0

Wie wählt man den Referenzwert für ein bestimmtes 'slno/type' Paar? Ich meine, warum wählst du den Wert von "name1" anstelle von name2 aus? –

Antwort

0

Wenn die Anforderung name2 geben detailliert die Werte von name1 Details, Sie, dass in MySQL mit einem join basierte Update tun können

update yourTable as t1 
join yourTable as t2 
on  t1.slno = t2.slno and 
     t1.type = t2.type 
set  t2.details = t1.details 
where t2.name = 'name2' and 
     t1.name = 'name1' 

Sie das gleiche erreichen können auch die Bedingungen bewegt ich in der where setzen Klausel zu den join Bedingungen

update yourTable as t1 
join yourTable as t2 
on  t1.slno = t2.slno and 
     t1.type = t2.type and 
     t2.name = 'name2' and 
     t1.name = 'name1' 
set  t2.details = t1.details 

Sie können beide Abfragen in Aktion sehen here

Verwandte Themen