首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为许多表( simultaneously_MYSQL )创建列并从表名填充它

为许多表( simultaneously_MYSQL )创建列并从表名填充它
EN

Stack Overflow用户
提问于 2013-05-16 09:03:55
回答 1查看 62关注 0票数 0

我有几百个完全相同的MYSQL表,其中包含10个中的3个特别重要的列。

代码语言:javascript
复制
Table 1 name: r_t

chr, chromStart, chromEnd...

Table 2 name: y_g

chr, chromStart, chromEnd...

有一个MasterTable:

代码语言:javascript
复制
full_table_name, table_name_before_underscore, table_name_after_underscore

第一列包括每个表的全名(第一表的r_t,第二表的y_g ),第二列--下划线之前的表名的第一部分(ry),3d后下划线(tE 211e 112ge 213)。

我需要从每个表中获得包含chr、chrStart、chromEnd行的chrStart和两个额外列,包括第一部分(下划线之前)和第二部分(下划线之后),以区分数据来自哪个表。关于上述两张表:

代码语言:javascript
复制
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的方法。

非常感谢您的任何想法!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-16 11:43:31

你所说的“准备好的语句不适用于Alter,Update”是什么意思?下面的为我工作

代码语言:javascript
复制
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() //

请注意,这确实创建了一个表,而不是一个联合视图,因此它不会反映输入表中的任何修改。我建议您执行此查询一次,然后废弃原始表并将它们替换为这个新的联合表的视图。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16583220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档