请帮我创建多插入查询

时间:2010-02-01 10:16:00

标签: sql sql-update sql-insert

我有两张桌子

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。

并且完整的表应该在单个查询中完成...我已经完成了更新部分但是无法进行插入部分..

更新查询:

 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

2 个答案:

答案 0 :(得分: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列。

答案 1 :(得分: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) 
相关问题