2012-11-29 30 views
0

我有一个情况我有表有两列(COL1 ,COL2)来更新使用组表数据和我添加布尔列(COL3)。现在我必须用不同的col1和第一次出现的col2更新行(即,与我们从col1得到的行相同,col3为真)。如何通过在MySQL

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

你怎么想的'col3'设置?为什么所有值都是1? –

+0

我想将它设置为true。 – dealer

回答

-2

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

+0

@ user11611218此表格类似于多对多关系的结果,并带有一个额外的属性,我希望col3为true,以便首先创建不同的col1。 – dealer

+0

你从来没有在你的问题中指定过。您提供的细节越多,获得的帮助就越多。如果你只是说你不需要多次插入,你会得到一个恰好解决这个问题的答案。 – RonaldBarzell

+0

是的,我看到了,我没有理由改变我的答案。 – RonaldBarzell

0

我测试了你的样本数据和它的作品:

UPDATE my_table 

SET  col3 = 1 

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