我有两张桌子
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
答案 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)