我想合并多个具有相同结构的表并创建一个大表。这些表有类似的名称,所以我想使用LIKE语句。谁能告诉我怎么做到这一点?
表非常简单,每个表都有一个ID列和一些其他列,但是有大量的表,所有表的名称都是'TX-xxx'
,其中'TX'
表示德克萨斯州,和'xxx'
是德克萨斯州的县;你知道德克萨斯州有200多个县。 (事实上,我必须为所有州执行此操作。)所以我想使用语句"LIKE 'TX-___'"
。
谢谢!
答案 0 :(得分:5)
您必须提供更多信息,以便我们确切了解您的需求,但您可以创建视图
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;
答案 1 :(得分: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%
答案 2 :(得分:0)
假设它们具有相同的列或类似:
insert into #table
Select * from (Select * from tbl1
Union
select * from tbl2
Union
select * from tbl3)
如果他们没有相同数量/类型的列,那么您应该向我们提供该信息。