2012-06-24 62 views
1

我有两个表:的MySQL更新查询

  • 表1:组名,ITEM_NAME,状态
  • 表2:组名,地理

我想更新table1。缺省状态为0.我想使用单个UPDATE语句将table1的状态更新为1。

我想检查table1中的每一行,如果group_name存在于table2中。如果是这样,我会将状态更新为1.

我试过这个,但无法得到正确的结果。

UPDATE table1 
SET table1.`STATUS`=1 
WHERE table2.group_name=table1.group_name 

我该如何达到我想要的效果?

+0

您所著UPDATE表1中,其中只有一个条件,而不是一个命令 –

+0

的SET是他的命令的实际格式是: –

+0

感谢您的评论,我需要了解更多.. –

回答

3

您可以像其他人一样使用多表更新。但你也可以用一个子查询单个表的更新语句做一个稍微简单的办法:

UPDATE table1 
SET STATUS = 1 
WHERE group_name IN (SELECT group_name FROM table2) 

还要注意的是,你甚至都不需要的前提下,在所有行status最初设置为零。您可以更新所有行的正确值的单一UPDATE声明:

UPDATE table1 
SET STATUS = group_name IN (SELECT group_name FROM table2) 
+0

@MattWestlake:我理解您的担忧,但我仍然认为这是一个有效且有用的答案,并与其他答案结合增加了额外的价值。对不起,你觉得我的答案应该是低估的,但我认为对于一个问题可以有多个有用的答案,并且这个网站的质量是一个问题收到许多不同的答案,显示各种不同的解决方案到同样的问题。 –

1

的SET是他的命令的实际格式为: 更新“表名” 组“列名” = “NEWVALUE” [ “nextcolumn”= “newvalue2” ...] 其中 “COLUMNNAME” OPERATOR “值” [和|或 “列” OPERATOR “值”];

没有一个SQL数据库运行起来,但我相信UPDATE命令类似于FROM指令,所以,我认为你必须做

UPDATE table1, table2 SET table1.'status' = 1 
WHERE table2.group_name=table1.group_name 
+0

运行这个命令会给出:'你的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,在''status'= 1附近使用正确的语法' WHERE table2.group_name = table1.group_name'at line 1' –

+0

这里的问题是状态引号。应该是'而不是' – Ander2

3

您可以使用多个更新表的语法,所以你的查询是:

UPDATE table1,table2 
SET table1.`STATUS`=1 
WHERE table2.group_name=table1.group_name 
+0

+1这工作正常。 –