请帮我创建多插入查询

问题描述:

我有两个表请帮我创建多插入查询

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

我觉得这是你后的那种东西:

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

如果没有游标,你会好得多:)游标在大型数据集中运行时间会更长。

确实,您可以使用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)