Вставить из нескольких таблиц? - PullRequest
0 голосов
/ 23 декабря 2011

У меня есть следующие таблицы: data_1, data_1, data_3, data_4, (data _ *).

Все они имеют одинаковые имена полей.

Я хочу вставить все записи об ошибках (where error != '') из этих таблиц в таблицу data_error, но только в определенные поля.

Как это можно заархивировать?

Ответы [ 3 ]

1 голос
/ 23 декабря 2011

Если вы хотите просмотреть все таблицы, следуя определенному правилу для имени таблицы:

CREATE DEFINER=`root`@`localhost` PROCEDURE `TEST_TABLE_LOOP` ()
BEGIN
    DECLARE data_TableName VARCHAR(50) DEFAULT '';
    DECLARE is_Done INT DEFAULT FALSE;

    DECLARE insert_MainCursor CURSOR FOR SELECT table_name FROM information_schema.tables WHERE table_name LIKE '<FILTER GOES HERE>';

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET is_Done = TRUE;

    OPEN insert_MainCursor;

    read_loop:LOOP
        FETCH insert_MainCursor INTO data_TableName;

        IF is_Done THEN
            LEAVE read_loop;
        END IF;

        SET @sql = CONCAT('INSERT INTO <DESTINATION_TABLE_NAME_HERE> SELECT <COLUMN1>, <COLUMN2> FROM ', data_TableName, ' WHERE <SOMETHING_SOMETHING_GOES_HERE>');
        PREPARE stmt FROM @sql; 
        EXECUTE stmt; 
        DEALLOCATE PREPARE stmt;

    END LOOP read_loop;

    CLOSE insert_MainCursor;
END
0 голосов
/ 23 декабря 2011
INSERT INTO data_error (column1, column2, column3)
SELECT column1, column2, column3
FROM data_1
WHERE error != ''
UNION ALL
SELECT column1, column2, column3
FROM data_2
WHERE error != ''
UNION ALL
SELECT column1, column2, column3
FROM data_3
WHERE error != ''
UNION ALL
SELECT column1, column2, column3
FROM data_4
WHERE error != ''

MySQL Ref

0 голосов
/ 23 декабря 2011

Я думаю, что вы хотите сделать что-то вроде:

insert into table (fields)
  select field from data_1
    where error <> 1;

Если вы хотите сделать это в одном запросе со всеми таблицами, вы можете сделать что-то

insert into table (fields)
  select field from data_1
    where error <> 1
  UNION
  select field from data_2
    where error <> 1
  UNION
  select field from data_3
    where error <> 1;

ии так далее.

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