2017-05-05 2 views
2

Ich habe eine Tabelle und möchte alte Werte mit einem neuen Datum einfügen, aber nur die eindeutigen.Fügen Sie eindeutige Werte in die gleiche Tabelle ein

t1 

ID  | Block  | Flats | 
1  |  1  |  GF-1 | 
2  |  1  |  GF-2 | 
3  |  2  |  GF-1 | 
4  |  2  |  GF-2 | 
5  |  2  |  GF-2 | 

dieser Teil meiner Tabelle ist mit einigen Beispieldaten Ich will es nach werden kopieren

ID  | Block  | Flats | 
1  |  1  |  GF-1 | 
2  |  1  |  GF-2 | 
3  |  2  |  GF-1 | 
4  |  2  |  GF-2 | 
5  |  2  |  GF-2 | 
6  |  1  |  GF-1 | 
7  |  1  |  GF-2 | 
8  |  2  |  GF-1 | 
9  |  2  |  GF-2 | 

Wie nach kopieren nur die unterschiedlichen Werte kopiert und GF-2 kam nur einmal. Aber als ich versuchte,

insert into t1 (ID,Block,Flats) select distinct Block,Flats from t1 

Kopien, die GF-2 zweimal in Block 2.

Hinweis: ID-Spalte um 1 automatisch erhöht wird.

+0

Sind Sie sicher, dass in der Spalte "Block" oder "Flats" keine führenden oder nachgestellten Leerzeichen enthalten sind? –

+0

@vkp nein gibt es keine. und wenn ich gerade Select Block, Wohnungen aus t1 ausführen gibt es genau die gleiche Leistung, die ich ohne Duplikate – Bilal

+0

wünschen Gibt es irgendwelche Trigger auf dem Tisch? – HLGEM

Antwort

2

Sie können alle Zeilen erzeugen cross join verwenden, Unkraut dann diejenigen aus, die bereits existieren:

insert into t1(block, flats) 
    select b.block, f.flats 
    from (select distinct block from t1) b cross join 
     (select distinct flats from t1) f left join 
     t1 
     on t1.block = b.block and t1.flats = f.flats 
    where t1.block is null; 

Hinweis: Dies setzt voraus, dass id eine identity Spalte (was ich sehe, Sie haben als die beschriebene Fall).

+0

Entschuldigung dafür, ein Neuling zu sein. Das war Probe. Im aktuellen Szenario werden 2 weitere Spalten eingegeben. Was passiert mit ihnen in diesem Fall? da ich nicht herausfinden kann, aus welcher Auswahl sie ihre Ausgabe bekommen werden. – Bilal

Verwandte Themen