Mysql UNION具有动态查询功能

时间:2014-06-21 15:53:16

标签: mysql dynamic union

我有以下问题。我继承了一个为每个客户使用数据库前缀的软件。 所有表都具有相同的结构和列。对于数据迁移到新版本,我想要联合所有这些表  并设置一个客户外键,并摆脱所有子表。我正在寻找一种创造方式  这个任务的视图,因为我现在也希望保持向后兼容。 我发现这个动态查询似乎做了我想要的 但是我无法在我的mysql服务器上执行。我假设它是为另一个sql server编写的。

表名结构是(大约80个客户表): customer1_faxe customer2_faxe customer3_faxe customer4_faxe ...

你会如何解决这个问题?

DECLARE  @SelectClause  VARCHAR(100)    = 'SELECT *'
        ,@Query         VARCHAR(1000)   = '' 

SELECT @Query = @Query + @SelectClause + ' FROM ' + TABLE_NAME + ' UNION ALL '
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE '%_faxe'

SELECT @Query = LEFT(@Query, LEN(@Query) - LEN(' UNION ALL '))

EXEC (@Query)

1 个答案:

答案 0 :(得分:0)

此查询使用SQL Server语法。你需要这样的东西:

declare @SelectClause varchar(8000);
declare @Query varchar(8000);

set @SelectClause = 'SELECT *';

SELECT @Query := group_concat(@SelectClause, ' FROM ', TABLE_NAME SEPARATOR ' UNION ALL ')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE '%_faxe';

prepare stmt from @Query;
execute stmt;

请注意,带有group_concat()的{​​{1}}简化了逻辑。