質問

私は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) 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top