Запрос экспорта MySQL в качестве операторов вставки
У меня есть две таблицы mysql, которые имеют общий идентификатор типа. Я хочу выбрать все из этих двух таблиц с тем же типомID, запрос ниже:
SELECT ta.requiredTypeID, ta.typeID, ta.quantity
FROM `invtypes` as t, `typeactivitymaterials` as ta
WHERE volume > 0 AND t.typeID = ta.typeID;
Это дает мне правильные результаты, но я пытаюсь экспортировать этот запрос в качестве вставных операторов. Я попытался добавить INTO OUTFILE "/path/", но это только экспортирует данные в виде данных с разделителями-запятыми, возможно ли экспортировать эти данные в качестве вставных операторов?
Приветствия
Eef
Ответы
Ответ 1
Вы можете комбинировать INSERT с SELECT для вставки записей непосредственно из результата оператора select.
То, как вы это делаете, будет примерно таким:
INSERT INTO newtable (requiredTypeID, typeID, quantity)
SELECT ta.requiredTypeID, ta.typeID, ta.quantity
FROM `invtypes` as t, `typeactivitymaterials` as ta
WHERE volume > 0 AND t.typeID = ta.typeID;
Здесь ссылка на соответствующую страницу руководства MySQL.
Обратите внимание, что это действительно сделает вставку сразу; он не будет делать то, что вы попросили (чтобы генерировать инструкции вставки для использования позже).
Ответ 2
Вместо этого вы можете использовать mysqldump
. Проверьте параметры --tables
и --where=
.
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html
Ответ 3
Если у вас есть MySQL Workbench, он может генерировать вставки для вас.
В редакторе SQL запустите запрос, затем из набора результатов вы можете нажать кнопку экспорта. Затем в "Сохранить как тип" выберите "Операторы SQL INSERT (*.sql)". Нажмите "Сохранить", подтвердите экспортируемую таблицу и нажмите "ОК".
Если вы откроете файл, вы увидите свой результирующий набор в качестве операторов вставки с именами столбцов.
Я тестировал это только на простой выбор * из таблицы. Я не тестировал это с помощью нескольких таблиц. Надеюсь, это поможет.
EDIT: Кажется, что workbench доступен для Windows, OSX и Linux (спасибо vcardillo)
Ответ 4
Вы можете сделать что-то вроде этого:
select
concat(
concat(
concat(
concat(
concat(
concat('insert into <table> (requiredTypeID, typeID, quantity) values ("'
,ta.requiredTypeID)
,'", "')
,ta.typeID)
,'", "')
,ta.quantity)
,'")')
FROM
`invtypes` as t, `typeactivitymaterials` as ta
WHERE
volume > 0 AND t.typeID = ta.typeID;
INTO OUTFILE 'file_name'
Я знаю, что это уродливо, но я думаю, что он решает ваш случай:)
Ответ 5
Просто оставив его здесь, если кто-то ищет точный запрос для создания запроса MySQL
export
в качестве операторов insert
, вы можете использовать mysqldump
как предложено @a'r.
mysqldump -u<user-name> -p<password> mydb t1 t2 t3 > mydb_tables.sql