1
 mysql> desc oldtable;
 +---------------+--------------+------+-----+---------+----------------+
 | Field         | Type         | Null | Key | Default | Extra          |
 +---------------+--------------+------+-----+---------+----------------+
 | uid           | int(11)      | NO   | PRI | NULL    | auto_increment |
 | active        | char(1)      | NO   |     | NULL    |                |
 | field3        | char(256)    | NO   |     | NULL    |                |
 | field4        | char(256)    | NO   |     | NULL    |                |
 +---------------+--------------+------+-----+---------+----------------+


 mysql> desc newtable;
 +------------+--------------+------+-----+---------+----------------+
 | Field      | Type         | Null | Key | Default | Extra          |
 +------------+--------------+------+-----+---------+----------------+
 | uid        | int(11)      | NO   | PRI | NULL    | auto_increment |
 | active     | tinyint(1)   | NO   |     | 0       |                |
 | field5     | int(12)      | NO   |     | 0       |                |
 | field6     | varchar(12)  | NO   |     | 0       |                |
 | field7     | varchar(12)  | NO   |     | 0       |                |
 +------------+--------------+------+-----+---------+----------------+

これは、以前のクエリchange a field and port mysql table data via scriptに似ています? 【oldtableからnewtableにデータを移植(ダンプ)したい。1 つの問題は、以前のテーブルでは、'Y' または 'N' のいずれかの値を格納するアクティブに char(1) を使用していたことです。これで、newtable はそれを 1 または 0 の int として格納します。

データを移植する前にこれを修正するにはどうすればよいですか? そのような修正と移植にはシェルスクリプトを使用する必要がありますか? サンプルスクリプトまたはヒント:)]

しかし、この質問、同じ移植を達成する方法、上記のように両方のテーブルに異なるフィールド数がある場合はどうすればよいですか?

4

1 に答える 1

1

答えは、前の質問の答えに似ています。

INSERT INTO newtable (uid, active, field5, field6, field7 )
SELECT uid,FIELD(active,'Y') as active, 0,'',''
FROM oldtable

次に、newTable を新しいフィールド値で更新します。

update newTable
set 
  field5 = (select someExpression from someTable5 t where t.uid=newTable.uid),
  field6 = (select someExpression from someTable6 t where ...),
  field7 = (select someExpression from someTable7 t where ...)

また、新しいフィールドを null 許可として定義し、このフィールドを値なしのままにすることもできます。

于 2012-04-30T07:17:16.697 に答える