0

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

 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

4

2 回答 2

0

我在您的示例数据上对此进行了测试,并且可以正常工作:

UPDATE  my_table

SET     col3 = 1

WHERE   col2 = (SELECT col2
                  FROM   my_table m
                  WHERE  m.col1 = col1
                  LIMIT 1
                 );
于 2012-11-29T15:59:25.287 回答
-2

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

于 2012-11-29T14:08:35.877 回答