0

私はこのコードを使用します

update 
contracts a, 
contracts_history b 
set 
a.name_surname=b.name_surname 

私のテーブルには64列があり、列名を指定せずにすべてのデータをコピーするソリューションを探しています-次の行に沿って:

 $sql = "INSERT INTO `contracts_history` 
         SELECT * FROM `contracts` WHERE id='$contract_id'";
4

1 に答える 1

0

insert into select...テーブルがデータ型が一致するフィールドの数とまったく同じである限り、構文を使用できます。そうでない場合は、コピーする対象を指定するために列名を使用する必要があります。

構文を示すために、例として次を実行しました。

mysql> use test
Database changed
mysql> show tables;
Empty set (0.00 sec)

mysql> create table test1 (id int(2), varry varchar(3));
Query OK, 0 rows affected (0.08 sec)

mysql> create table test2 (id int(2), barry varchar(3));
Query OK, 0 rows affected (0.05 sec)

mysql> insert into test2 values(1,'aaa');
Query OK, 1 row affected (0.00 sec)

mysql> select * from test1;
Empty set (0.00 sec)

mysql> insert into test1 (select * from test2);
Query OK, 1 row affected (0.06 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select * from test1;
+------+-------+
| id   | varry |
+------+-------+
|    1 | aaa   |
+------+-------+
1 row in set (0.00 sec)

mysql> alter table test2 add column third int(1);
Query OK, 1 row affected (0.06 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> update test2 set barry='ccc';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> insert into test1 (select * from test2);
ERROR 1136 (21S01): Column count doesn't match value count at row 1
mysql>
于 2012-09-10T04:33:41.927 に答える