如何在mysql中使用group更新表数据

时间:2012-11-29 13:59:34

标签: mysql

我遇到的情况是我有两列的表( col1,col2 ),我添加了布尔列( col3 )。现在我必须更新具有不同col1和col2的第一次出现的行(即),与我们从group by col1获得的行相同,其中 col3为真

 create table my_table( col1 integer, col2 integer, col3 tinyint(1));

 insert into my_table(col1,col2) values(1,2);
 insert into my_table(col1,col2) values(1,1);
 insert into my_table(col1,col2) values(2,1);
 insert into my_table(col1,col2) values(2,2);
 insert into my_table(col1,col2) values(2,8);
 insert into my_table(col1,col2) values(3,2);
 insert into my_table(col1,col2) values(3,1);
 insert into my_table(col1,col2) values(3,5);
 insert into my_table(col1,col2) values(3,6);
 insert into my_table(col1,col2) values(4,3);
 insert into my_table(col1,col2) values(4,6);
 insert into my_table(col1,col2) values(4,5);
 insert into my_table(col1,col2) values(4,2);

当我添加新列表时,以下值为col3 null。

 COL1   COL2    COL3
  1     2      (null)
  1     1      (null)
  2     1      (null)
  2     2      (null)
  2     8      (null)
  3     1      (null)
  3     2      (null)
  3     5      (null)
  3     6      (null)
  4     3      (null)
  4     6      (null)
  4     5      (null)
  4     2      (null)

我想要一个查询来更新我的表,如下所示:

  COL1  COL2    COL3
  1     2        1
  1     1      (null)
  2     1        1
  2     2      (null)
  2     8      (null)
  3     1        1
  3     2      (null)
  3     5      (null)
  3     6      (null)
  4     3        1
  4     6      (null)
  4     5      (null)
  4     2      (null)

SQLFiddle架构链接:http://sqlfiddle.com/#!2/0ddce/1

2 个答案:

答案 0 :(得分:0)

我在您的示例数据上对此进行了测试,结果正常:

UPDATE  my_table

SET     col3 = 1

WHERE   col2 = (SELECT col2
                  FROM   my_table m
                  WHERE  m.col1 = col1
                  LIMIT 1
                 );

答案 1 :(得分:-2)

如果您不介意在更新中收到错误,可以将col1定义为主键。这将确保如果表中存在col1,则无法再次添加。