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
War es hilfreich?

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) 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top