0

以下の INSERT INTO を UPDATE SET に変換しようとしましたが、問題が発生しています... SQL Server 2008 を使用しています

INSERT INTO tableA
(c_id, status)
SELECT  tableB.c_id, COUNT(*)
FROM    tableB
    LEFT JOIN tableC
        ON tableB.c_id = tableC.c_id
  WHERE tableC.c_id != tableC.c_id_update
GROUP BY tableB.bl_id

これまでに思いついたこと...しかし、キーワード「SET」の後の変数c_idと項目の割り当てで問題が発生しています。

UPDATE tableA SET
c_id = tableB.c_id
,items -- count(*)??
SELECT  tableB.c_id, COUNT(*)
FROM    tableB
    LEFT JOIN tableC
        ON tableB.c_id = tableC.c_id
  WHERE tableC.c_id != tableC.c_id_update
GROUP BY tableB.bl_id
4

2 に答える 2

1
UPDATE A
SET
    A.status = X.c
FROM 
tableA A INNER JOIN (
SELECT  tableB.c_id, COUNT(*) as c
FROM    tableB
    LEFT JOIN tableC
        ON tableB.c_id = tableC.c_id
  WHERE tableC.c_id != tableC.c_id_update
GROUP BY tableB.bl_id ) X
ON A.c_id = X.c_id
于 2012-04-04T14:15:10.863 に答える
0

選択を更新に変換し、クエリの選択部分をコメントとして埋め込む秘密を共有します。

UPDATE A 
    SET     items = X.c 
--select  Aitems, X.c,* 
FROM  tableA A 
INNER JOIN ( SELECT  tableB.c_id, COUNT(*) as c 
            FROM    tableB    
            LEFT JOIN tableC        
                ON tableB.c_id = tableC.c_id   
            WHERE tableC.c_id != tableC.c_id_update 
            GROUP BY tableB.bl_id ) X 
    ON A.id = X.c_id 

また、更新しているフィールドと新しい値に使用しているフィールドをリストの前に表示するようにしています (選択に多くのフィールドがある場合)。これにより、更新しようとしているものが実際に望んでいたものであるかどうかを簡単に判断できますが、select キーワードからクエリを実行します。

于 2012-04-04T14:26:01.427 に答える