【问题标题】:How to merge multiple tables with similar names in MySQL [duplicate]如何在MySQL中合并多个具有相似名称的表[重复]
【发布时间】:2012-05-30 06:36:21
【问题描述】:

可能重复:
How can I merge two MySql tables?

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

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

谢谢!

【问题讨论】:

标签: mysql sql merge


【解决方案1】:

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

CREATE VIEW myViewName AS 

select * 
from table1 

union all 

select * from 
table2 

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

 select * from myViewName

现在为了从特定表中抓取,我不确定如何在 mysql 中执行此操作,尽管我已经在 tsql 中完成了。 This previous question 会帮助你,所以你可能有类似的东西:

-- 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;

【讨论】:

  • 感谢您的意见,但谁低估了我的问题? :)
【解决方案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%

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-07-13
      • 1970-01-01
      • 2014-09-30
      • 2020-10-25
      • 2022-01-02
      • 2021-07-15
      • 2021-09-24
      • 2018-09-24
      • 1970-01-01
      相关资源
      最近更新 更多