Определить таблицу членов в хранилище MySQL MERGE - PullRequest
1 голос
/ 10 октября 2011

У нас есть таблица MYSQL MERGE Storage Engine, которая объединяет данные из 40 таблиц (от « table01 » до « table40 »).Запустив запрос SELECT, мы получим все записи из всех объединенных таблиц MySQL.Структура и поведение таблицы MERGE такие же, как и ожидалось.

Однако бывает, что нам нужно определить, какая запись строки объединенной таблицы пришла или соответствует какой объединенной таблице, т.е.

  • rowA=> " table01 "
  • rowB => " table12 "
  • rowC => " table12 "
  • rowD => " table35 "
  • rowE => " table39 "
  • row ... => " table..."

Есть ли способ сделать это с помощью механизма хранения MySQL MERGE?

1 Ответ

0 голосов
/ 10 октября 2011

Не так уж и элегантно, но вы можете добавить столбец идентифицирующих целых чисел в каждую из ваших таблиц, укажите для этого столбца значение по умолчанию 1, 2 (в зависимости от того, какая это таблица - вы можете даже добавить таблицу поиска (tableId - -> tableName) и тогда вы сможете определить, из какой таблицы пришла данная строка.

Вы, конечно, тоже должны были бы внести те же изменения в таблицу MERGE ...

С любовью сорвал документы MERGE MySQL :

CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,message CHAR(20)) ENGINE=MyISAM;

CREATE TABLE t2 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,message CHAR(20)) ENGINE=MyISAM;

INSERT INTO t1 (message) VALUES ('Testing'),('table'),('t1');
INSERT INTO t2 (message) VALUES ('Testing'),('table'),('t2');

CREATE TABLE total (a INT NOT NULL AUTO_INCREMENT,message CHAR(20),INDEX(a)) ENGINE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;

alter table t1 add column identifier int unsigned not null default 1;
alter table t2 add column identifier int unsigned not null default 2;

drop table total;

CREATE TABLE total (a INT NOT NULL AUTO_INCREMENT,message CHAR(20),identifier int unsigned,INDEX(a)) ENGINE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;

У вас будет довольно скучная задача изменить все 40 таблиц, хотя ...

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