Bitte helfen Sie mir mit mehreren INSERT-Abfrage zu erstellen
-
24-09-2019 - |
Frage
Ich habe zwei Tabelle bekommt
create table t1(cid int, isnews int)
create table t2(nid int,cid int, isnews int)
Situationen sind wie folgt: wenn t2 enthalten t2.cid = t1.cid dann die t2.isnews = t1.news und wenn t2 nicht cid von t1 dann neuer Datensatz enthalten sollte in t2 und dass t1.cid eingeführt werden, sollte t1.isnews in t2 eingefügt werden ..
und vollständige Tabelle sollte in einzelner Abfrage durchgeführt werden ... Ich habe den updation Teil getan, aber nicht in der Lage Einführungsteil zu tun ..
Update-Abfrage:
UPDATE t22
SET t22.isnews = t11.isnews
FROM t2 AS t22
JOIN t1 AS t11
ON t11.cid= t22.cid
Ich habe unten Cursor zum Einsatz vorbereitet ... ist es gut? :
DECLARE @clntid INT
DECLARE @clntnewsltr INT
DECLARE clientnews CURSOR FOR
SELECT clientid,newsLetter
FROM clients
WHERE clientid NOT IN (SELECT clientid FROM clientprivacy)
OPEN clientnews
FETCH NEXT FROM clientnews INTO @clntid,@clntnewsltr
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO clientprivacy (clientId,tdNewsLetters) VALUES(@clntid, @clntnewsltr)
FETCH NEXT FROM clientnews INTO @clntid,@clntnewsltr
END
CLOSE clientnews
DEALLOCATE clientnews
Lösung
Ich denke, das ist die Art der Sache Sie nach:
--INSERT t2 (cid, isnews)
SELECT t1.cid, t1.isnews
FROM t1
LEFT JOIN t2 ON t1.cid = t2.cid
WHERE t2.cid IS NULL
Ich habe die INSERT Linie auf Kommentar -. Ich empfehle Ihnen, die SELECT laufen auf eine eigene erste ist zu überprüfen, es Ihnen nicht geben das richtige Ergebnis (alle Datensätze aus t1, die keine passende cid in t2 haben)
Ich habe angenommen t2.nid ist eine Identity-Spalte.
Andere Tipps
Sie werden so viel besser dran ohne Cursor :) Cursor viel länger dauern in großen Datensätzen ausgeführt werden.
Es ist wahr, dass Sie ein LEFT JOIN verwenden können, aber Sie können auch eine SELECT in Ihrer WHERE-Klausel verwenden. Die meiste Zeit ist es eine Art Wahl.
CREATE TABLE table1(col_1 int, col_2 int)
CREATE TABLE table2(nid int, col_1 int, col_2 int)
INSERT INTO table2 (col_1,col_2)
SELECT col_1,col_2
FROM table1
WHERE col_1 NOT IN (SELECT col_1 FROM table2)