从MySQL中的一组类似命名的表中进行选择

时间:2013-03-25 19:43:56

标签: mysql sql

我有多个表,其名称以'Event'字结尾 - 如'TcpEvent','RdpEvent',WebEvent'等。表模式有几个常见的列,如'ID','Name','日期”。

是否有任何通用SQL,以便我可以使用简单的SINGLE选择获取所有公共列内容?我尝试使用以下SQL - 但它不起作用。

SELECT ID, Name FROM (SELECT TABLE_NAME FROM ( 
    SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS 
      WHERE TABLE_NAME LIKE '%Event') AS T) AS T;

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

根据这些表及其共有的列创建视图:

create v_events as 
    select id, name, date, 'tcp' as eventtype from tcpEvent union all
    select id, name, date, 'rdp' as eventtype from rdpEvent union all
    select id, name, date, 'web' as eventtype from webEvent;

另一种方法是使用动态SQL(通过prepare staetment)。拥有共同观点可能是最简单,最易维护的方法。

答案 1 :(得分:1)

您可以使用动态SQL来实现此目的,示例如下:(可能会给您一个提示)


declare @str varchar(max)
declare @str1 varchar(100)
set @str = 'select ID,Name from '
set @str1 = 'select ID,Name from '
select @str = @str +  TABLE_NAME + ' UNION ALL ' + @str1 FROM (SELECT Distinct TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS 
      WHERE TABLE_NAME LIKE '%Event') A
IF CHARINDEX('UNION ALL',@str, 0) > 0
    SET @str = SUBSTRING(@str,0, len(@str)-len('UNION ALL select ID,Name from '))
print @str