替换mySQL

时间:2015-10-30 19:07:39

标签: mysql

我在mySQL中有一个表ts1,由column1,...,column100和一个由column1,...,column100组成的表ts2组成。我想将ts1的column1,...,column90中的值替换为ts2中的值,而不列出所有列的名称。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您必须动态分配值和列,因此您需要将变量与INFORMATION_SCHEMA.COLUMNS结合使用。

  • 首先,您为表ts1的前90列创建一个CONCAT,然后将它们存储在变量@sql1中。
  • 然后,您为表ts2的最后10列创建相同的CONCAT,并将它们存储在变量@sql2中。
  • 最后,将这两个值合并到一个SELECT语句中,该语句将在执行时为您提供INSERT值。

请注意,只有当您的表ts1ts2具有相同的行数并且具有适当的列才能加入时,此解决方案才有效。

另请注意,如果您在phpMyAdmin中尝试此操作,它将无法运行,但如果您打开MySQL控制台并复制&粘贴它,它将被正确执行。

SET @sql = NULL;
SET @sql1 = NULL;
SET @sql2 = NULL;

SET @t1 = 'ts1';
SET @t2 = 'ts2';
SET @t3 = 'ts3';

SELECT GROUP_CONCAT(CONCAT(@t1, '.' ,COLUMN_NAME)) INTO @sql1
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = @t1 AND table_schema = 'a' AND ORDINAL_POSITION <= 90;

SELECT GROUP_CONCAT(CONCAT(@t2, '.', COLUMN_NAME)) INTO @sql2
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = @t2 AND table_schema = 'a' AND ORDINAL_POSITION > 90;

SET @sql = CONCAT('INSERT INTO ', @t3, ' (', ' SELECT ', @sql1, ', ', @sql2, ' FROM ', @t1, ' INNER JOIN ', @t2, ' ON ', @t1, '.col1 = ', @t2, '.col1 );');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;