Скопируйте много таблиц в MySQL - PullRequest
1 голос
/ 27 июля 2010

Я хочу скопировать много таблиц с одинаковыми именами, но с разными префиксами.Я хочу, чтобы таблицы с префиксом wp_ входили в соответствующие таблицы с префиксом shop_.

Другими словами, я хочу сделать что-то , например:

insert into shop_wpsc_*
select * from wp_wpsc_*

Как бы вы сделали это?

Ответы [ 4 ]

3 голосов
/ 27 июля 2010

SQL не позволяет использовать имена таблиц с подстановочными знаками - единственный способ сделать это - циклически проходить по списку таблиц (через ANSI INFORMATION_SCHEMA / INFORMATION_SCHEMAS) при использовании динамического SQL.

Динамический SQL отличается для каждого поставщика базы данных ...

Обновление

MySQL?Почему ты так не сказал в первую очередь ...

Динамический SQL MySQL называется "Подготовленные операторы" - это моя любимая ссылка для него, кроме документации .На SO много вопросов по поводу операций со всеми таблицами в базе данных MySQL - просто нужно настроить предложение WHERE, чтобы получить нужные имена таблиц.

Вы захотите сделать это из хранимая процедура MySQL ...

2 голосов
/ 27 июля 2010

Вы можете сделать это, объединив несколько операторов в один подготовленный оператор - попробуйте сделать это:

SELECT @sql_text := GROUP_CONCAT(
                              CONCAT('insert into shop_wpsc_',
                                      SUBSTRING(table_name, 9),
                                      ' select * from ', table_name, ';'), ' ')
  FROM INFORMATION_SCHEMA.TABLES
 WHERE table_schema = 'example'
   AND table_name LIKE 'wp_wpsc_%';

PREPARE stmt FROM @sql_text;

EXECUTE stmt;
1 голос
/ 27 июля 2010

Если немного расширить ответ OMG Ponies, вы можете использовать словарь данных и написать SQL для написания SQL. Например, в Oracle вы можете сделать что-то вроде этого:

SELECT 'insert into shop_wpsc_' || SUBSTR(table_name,9) || ' select * from ' || table_name || ';'
FROM all_tables
WHERE table_name LIKE 'WP_SPSC%'

Это сгенерирует серию операторов SQL, которые вы можете запустить как один скрипт. Как указывалось в OMG Ponies, синтаксис будет варьироваться в зависимости от того, какого поставщика БД вы используете (например, all_tables зависит от Oracle).

0 голосов
/ 27 июля 2010

Сначала я бы выбрал все таблицы из представлений каталога (их имена могут зависеть от ваших dmb, хотя если они совместимы с ANSI, они должны поддерживать INFORMATION_SCHEMA), которые начинаются с wp_wpsc_.

экземпляр для DB2:

SELECT NAME FROM TABLES WHERE NAME LIKE 'wp_wpsc_%'

)

Затем выполните итерацию по этому набору результатов и создайте динамический оператор в форме, которую вы дали для чтения из текущей таблицы и вставки в соответствующую новуюодин.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...