2012-04-04 338 views
0

我试图将下面的INSERT INTO转换为UPDATE SET,但我遇到了一些麻烦......我正在使用SQL Server 2008如何将此INSERT INTO语句转换为UPDATE SET语句

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和items的赋值问题。

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 
+0

哪个RDBMS(MySQL,Oracle,SQL Server,PostgreSQL)?它们对于复杂的UPDATE语句都有不同的语法。 – ruakh 2012-04-04 14:13:28

+0

什么是RDBMS?连接语法不同。 – 2012-04-04 14:13:35

+0

SQL SERVER 2008 – dido 2012-04-04 14:14:36

回答

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 
+1

它给我一个错误说“无效的列名c_id”。我认为你的意思是A.c_id不是A.id? – dido 2012-04-04 14:45:52

+0

是的,抱歉我的错误,它是这样工作的? – Zyku 2012-04-04 14:52:52

+0

不,仍然无法正常工作。给我相同的错误“无效的列名称c_id”。你是否也想在第四行说“SELECT c_id FROM table A ....”? – dido 2012-04-04 14:57:27

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关键字时的查询。