1

異なるデータベースに2つの同一のテーブルがあります

Database : live
table : customer
id | name | email | address

Database : test
table : customer
id | name | email | address | phone | post_code | company

これは単なるサンプル構造です。ライブデータベーステーブルに15フィールド、テストデータベーステーブルに35フィールドがあります。ライブからテストデータベーステーブルにデータを挿入できるクエリを作成したいと思います。どうやってやるの。私はこれを試しました

INSERT INTO test.customer
SELECT *
FROM live.customer as cd
WHERE NOT EXISTS(SELECT * from test.customer);

これにより、データが同じ順序でない場合、間違った列にデータが挿入されます。
そして、これは私が試した別の方法です

INSERT INTO test.customer (id,name,email,address)
SELECT *
FROM live.customer as cd
WHERE NOT EXISTS(SELECT * from test.customer);

これは問題ありませんが、15列の名前を書きたくありません。ライブデータベーステーブルからすべての列を選択し、その結果を挿入の()に入れるにはどうすればよいですか。

4

1 に答える 1

2

これに対する純粋な SQL ソリューションはないと思います。ただし、次のように作成された動的クエリを使用できます。

SET @sql = null;

SELECT
  CONCAT('INSERT INTO test.customer (',
    group_concat(CONCAT('`', COLUMN_NAME, '`') separator ','),
    ') SELECT ',
    group_concat(CONCAT('`', COLUMN_NAME, '`') separator ','),
    ' FROM live.customer WHERE NOT EXISTS(SELECT * from test.customer)')
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_NAME`='customer' AND `TABLE_SCHEMA`='test'
INTO @sql;

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SELECT * FROM test_customer;

ここでフィドルを参照してください。

于 2013-03-01T09:45:54.153 に答える