请帮我创建多插入查询
问题描述:
我有两个表请帮我创建多插入查询
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
答
我觉得这是你后的那种东西:
--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)
你的问题已经格式化,但请编辑它以匹配您的例子的表和列('t1' VS'clientprivacy'),以提供有关您使用并重新格式化您的条件DBMS的信息。使用预览检查它是否可读。 – 2010-02-01 10:21:30