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 回答