不是那么优雅,但您可以在每个表上添加一个标识整数列,将该列指定为默认值 1 ,2 (取决于它是哪个表 - 您甚至可以放入查找表(tableId - -> tableName),然后您应该能够分辨给定行来自哪个表。
当然,您也必须对 MERGE 表进行相同的更改...
亲切地撕掉MERGE MySQL docs:
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 个表的相当枯燥的任务...