2016-03-18 4 views
-1

ich in einer solchen Art und Weise einen Fehler Einsatz hatlöschen Daten nach Einsatz bulk Anweisung

insert into tab1 (col1 , col2 , col3) select col1 , col2,col3 from tab2 

Ich habe 7600 Reihe Effekte

Ich will diese 7600 Zeilen gelöscht werden, wenn ich unten gemacht löschen wäre es sicher ?

delete from tab1 where exists select col1 , col2,col3 from tab2 

Ich frage dies zu wissen, ob ich Daten in Tab1 verloren werde. Würde diese Abfrage mehr als 7600 Zeilen löschen? wenn es gemeinsame Daten gäbe, hätte ich eine eindeutige Einschränkung in isert richtig? (ja beide haben die gleiche PK)

Antwort

0

Ihre DELETE Anweisung ist nicht einmal gültige Syntax, also glaube ich nicht, dass es tun wird, was Sie wollen. Selbst wenn Sie die Syntax zwar korrigiert haben, haben Sie nichts zu tun tab1 zu tab2.

Weiter haben Sie Ihre Tabellenstrukturen nicht zur Verfügung gestellt, so dass alles von nun an nur eine Vermutung von meiner Seite ist. Bitte lesen: https://stackoverflow.com/help/how-to-ask

Try running:

SELECT COUNT(*) 
FROM 
    tab1 
INNER JOIN tab2 ON tab2.col1 = tab1.col1 -- Is this the primary key? If not then you'll need to join on the whole primary key 

Wenn Sie die gleiche Nummer wie Sie bekam, wenn Sie die INSERT tat dann können Sie tun:

DELETE T1 
FROM 
    Tab1 T1 
INNER JOIN Tab2 T2 ON T2.col1 = T1.col1 

würde ich die DELETE in setzen eine Transaktion und rollen Sie sie einmal zurück, nur um die Anzahl zu überprüfen. Wenn sie übereinstimmt, führen Sie sie aus und übernehmen Sie sie.

+0

Nun das ist meine Frage das Löschen ist nicht im Zusammenhang mit einfügen gibt es keine Bedingung nur eine Masse, wenn ich das Gegenteil von der einfügen .. das Löschen wäre das gleiche .. die ddl der Tabelle wird nicht helfen, sie sind identisch. und ich weiß, wie man Fragen stellt. Aber was ist der Unterschied zwischen innerer Verbindung und Masseneinfügung? – Moudiz