我遇到的情况是我有两列的表( 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
答案 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,则无法再次添加。