2

可能重复:
如何合并两个 MySql 表?

我想合并多个具有相同结构的表并制作一个大表。这些表具有相似的名称,所以我想使用 LIKE 语句。谁能告诉我我该怎么做?

表很简单,每个都有一个ID列和几个其他的列,但是表的数量很大,所有的表的名字都像'TX-xxx',其中的'TX'意思是Texas,'xxx'是Texas的县;你知道得克萨斯州有 200 多个县。(事实上​​,我必须对所有州都这样做。)所以我想使用语句"LIKE 'TX-___'".

谢谢!

4

3 回答 3

5

您必须提供更多信息,以便我们确切知道您想要什么,但您可以创建一个视图

CREATE VIEW myViewName AS 

select * 
from table1 

union all 

select * from 
table2 

这样,它将显示来自所有表的信息(并且可以限制在选择中不显示所有内容),并且当 table1、table2 等发生更改时,视图将反映这一点。您可以随时更改它并像获取表格一样从中获取:

 select * from myViewName

现在从特定表中抓取我不确定如何在 mysql 中执行此操作,尽管我已经在 tsql 中完成了它。上一个问题会对您有所帮助,因此您可能会遇到以下情况:

-- Create temporary table of varchar(200) to store the name of the tables. Depending on how you want to go through the array maybe an id number (int). 
insert into tempTableName (name)
SELECT table_name FROM information_schema.tables WHERE table_schema = 'database_name' and table_name like 'TX_%';
declare @sqlQuery varchar(max)
--Then you will want to loop through the array and build up an sql statement
-- For each loop through:
     if len(@sqlQuery) = 0 begin -- first time through
         set @sqlQuery = 'select col1, col2, col3 from ' + currentTableName
     end else begin -- second+ time through
         set @sqlQuery = 'union all select col1, col2, col3 from ' + currentTableName
     end
-- after the loop add the create view. Could double check it worked by checking length = 0 again
set @sqlQuery = 'CREATE VIEW myViewName AS ' + @sqlQuery
Once the query string is built up you will execute it with
PREPARE stmt FROM @sqlQuery;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
于 2012-05-23T17:03:56.580 回答
2

如果我正确理解您的问题,UNION 就是您所需要的。就像是

SELECT field1, field2
FROM (
SELECT field1, field2 from table1
UNION
SELECT field1, field2 from table2
) all_tables
WHERE all_tables.field1 like "%whatever%
于 2012-05-23T17:03:13.497 回答
0

假设它们具有相同或相似的列:

insert into #table
Select * from (Select * from tbl1 
               Union 
               select * from tbl2 
               Union 
               select * from tbl3)

如果他们没有相同数量/类型的列,那么您应该向我们提供该信息。

于 2012-05-23T18:41:41.853 回答