0

2 つの列 ( col1 、 col2 )を持つテーブルがあり、ブール列 ( col3 ) を追加した状況が発生しました。ここで、個別の col1 と最初に発生した col2 で行を更新する必要があります (つまり、col3 を true としてcol1 でグループから取得した行と同じです) 。

 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 に答える