我有几百个完全相同的MYSQL表,其中包含10个中的3个特别重要的列。
Table 1 name: r_t
chr, chromStart, chromEnd...
Table 2 name: y_g
chr, chromStart, chromEnd...有一个MasterTable:
full_table_name, table_name_before_underscore, table_name_after_underscore第一列包括每个表的全名(第一表的r_t,第二表的y_g ),第二列--下划线之前的表名的第一部分(r和y),3d后下划线(tE 211和e 112ge 213)。
我需要从每个表中获得包含chr、chrStart、chromEnd行的chrStart和两个额外列,包括第一部分(下划线之前)和第二部分(下划线之后),以区分数据来自哪个表。关于上述两张表:
Union_all_table:
chr, chrStart, chromEnd, table_name_before_underscore, table_name_after_underscore
1, 3456, 3487, r, t;
1, 3778, 3799, y, g;准备好的语句不适用于Alter、Update table,所以我无法看到只使用MYSQL的方法。
非常感谢您的任何想法!
发布于 2013-05-16 11:43:31
你所说的“准备好的语句不适用于Alter,Update”是什么意思?下面的为我工作
CREATE PROCEDURE proc()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE a, b CHAR(1);
DECLARE cur CURSOR FOR
SELECT table_name_before_underscore,
table_name_after_underscore
FROM master;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN CUR;
read_loop: LOOP
FETCH cur INTO a, b;
IF done THEN
LEAVE read_loop;
END IF;
SET @query = CONCAT('INSERT INTO Union_all_table SELECT ',
'chr, chromStart, chromEnd, \'',
a, '\', \'', b, '\' FROM ',
a, '_', b);
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;
CLOSE cur;
END //
CALL proc() //请注意,这确实创建了一个表,而不是一个联合视图,因此它不会反映输入表中的任何修改。我建议您执行此查询一次,然后废弃原始表并将它们替换为这个新的联合表的视图。
https://stackoverflow.com/questions/16583220
复制相似问题