Відповіді:
INSERT INTO TARGET_TABLE SELECT * FROM SOURCE_TABLE;
EDIT: або якщо таблиці мають різні структури, ви також можете:
INSERT INTO TARGET_TABLE (`col1`,`col2`) SELECT `col1`,`col2` FROM SOURCE_TABLE;
EDIT: щоб обмежити це ..
INSERT INTO TARGET_TABLE (`col1_`,`col2_`) SELECT `col1`,`col2` FROM SOURCE_TABLE WHERE `foo`=1
Якщо таблиці не існує, ви можете створити її з такою ж схемою, як:
CREATE TABLE table2 LIKE table1;
Потім скопіюйте дані на:
INSERT INTO table2 SELECT * FROM table1
SELECT ... INTO
призначений для експорту таблиці у вихідний файл або до змінних; не безпосередньо в стіл. Дивіться dev.mysql.com/doc/refman/5.7/uk/select-into.html
Якщо table1 є великим і ви не хочете його блокувати протягом тривалості процесу копіювання, ви можете зробити дамп-і-завантаження замість цього:
CREATE TABLE table2 LIKE table1;
SELECT * INTO OUTFILE '/tmp/table1.txt' FROM table1;
LOAD DATA INFILE '/tmp/table1.txt' INTO TABLE table2;
show processlist
я не міг бачити жоден запит, що працює. Не впевнений, у чому проблема.
Якщо ви хочете створити та скопіювати вміст в одному кадрі, просто використовуйте ВИБІР:
СТВОРИТИ ТАБЛИКУ new_tbl SELECT * FROM orig_tbl;
Це працювало для мене. Ви можете зробити оператор SELECT складнішим із застереженнями WHERE та LIMIT.
Спочатку дублюйте свою велику таблицю (без даних), запустіть наступний запит та обріжте більшу таблицю.
INSERT INTO table_small (SELECT * FROM table_large WHERE column = 'value' LIMIT 100)
Супер просто. :-)
CREATE TABLE target_table SELECT * FROM source_table;
Він просто створить нову таблицю з тією ж структурою, що і вихідну таблицю, а також скопіює всі рядки з source_table у target_table.
CREATE TABLE target_table SELECT * FROM source_table WHERE condition;
Якщо вам потрібно скопіювати кілька рядків у target_table, то застосуйте умову всередині, де пункт
Спробуйте це. Добре працює в моєму Oracle 10г,
CREATE TABLE new_table
AS (SELECT * FROM old_table);