マルチINSERTクエリを作成するために私を助けてください
-
24-09-2019 - |
質問
私は2つのテーブル
を持っています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の後、新しいレコードをt2とそのt1.cidに挿入されなければならないの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
解決
私は、これはあなたが後にしているもののようなものだと思います
--INSERT t2 (cid, isnews)
SELECT t1.cid, t1.isnews
FROM t1
LEFT JOIN t2 ON t1.cid = t2.cid
WHERE t2.cid IS NULL
私はあなたがそれはあなたの正しい結果(T2に一致するCIDを持っていないt1からすべてのレコード)を得ませんチェックして、それ自身の最初にSELECTを実行するお勧めします。 - 私は、INSERT行をコメントアウトしました。 P>
私はt2.nidがIDENTITY列であると仮定しました。
他のヒント
あなたはそんなに良くカーソルなしでオフになります:)カーソルが大規模なデータセットで実行するためにはるかに長い時間かかります。
あなたが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)
所属していません StackOverflow