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 并且 t1.cid, t1.isnews 应该插入t2..

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

更新查询:

 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
4

2 回答 2

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

于 2010-02-01T10:35:21.947 回答
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) 
于 2013-03-29T00:05:42.320 回答