2010-02-01 59 views
0

我有兩個表請幫我創建多插入查詢

create table t1(cid int, isnews int) 

create table t2(nid int,cid int, isnews int) 

的情況是這樣的:如果 T2包含t2.cid = t1.cid那麼t2.isnews = t1.news和 如果t2不包含t1的cid,那麼應該在t2中插入新記錄,並且應該在t2中插入t1.cid,t1.isnews ..

並且應該在單個查詢中完成整個表...我已經完成更新部分但不能做插入部分..

upd吃查詢:

UPDATE t22 
SET  t22.isnews = t11.isnews 
FROM  t2 AS t22 
    JOIN t1 AS t11 
    ON t11.cid= t22.cid 

我已經準備好下面的光標插入...是好的嗎? :

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 
+0

你的問題已經格式化,但請編輯它以匹配您的例子的表和列('t1' VS'clientprivacy'),以提供有關您使用並重新格式化您的條件DBMS的信息。使用預覽檢查它是否可讀。 – 2010-02-01 10:21:30

回答

1

我覺得這是你後的那種東西:

--INSERT t2 (cid, isnews) 
SELECT t1.cid, t1.isnews 
FROM t1 
    LEFT JOIN t2 ON t1.cid = t2.cid 
WHERE t2.cid IS NULL 

我註釋掉的INSERT行 - 我建議你運行SELECT它自己首先要檢查它會給你正確的結果(t1中的所有記錄在t2中沒有匹配的cid)。

我假設t2.nid是一個IDENTITY列。

+0

你們這些人正在做着高尚的工作......對每一位程序員都非常有幫助 – 2010-02-01 11:22:53

0

如果沒有遊標,你會好得多:)遊標在大型數據集中運行時間會更長。

確實,您可以使用LEFT JOIN,但是您也可以在WHERE子句中使用SELECT。大多數時候這是一種風格選擇。

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)