2013-05-20 36 views
0

说我有一个数据库DB1以下数据来自所有列的所有数据:选择在MySQL数据库中

表1 ID INT(50) 属性为varchar(255)

行总数:6550

表2 ID INT(50) 属性VARCHAR(255) ATTRIBUTE1 VARCHAR(255)

总列数:10550

可能会说更多的表格。我希望获得所有表中的每一个数据元素。有没有任何SELECT语句或可以做到这一点?我试过使用

select * from DB1.Table1 UNION ALL select * from DB1.Table2; 

但是,这给了我一个错误,指出行数是不同的,因此无法完成。请告诉我是否有任何方法可以这样做?

问候。

回答

2

您必须明确提供每个表的列。像:

select id, attribute, '' AS attribute1 from DB1.Table1 
UNION ALL 
select id, attribute, attribute1 from DB1.Table2; 
+0

但是,如果我有一个大型数据库,其列名太多而无法手工列举呢?我可以从information_schema.tables中选择列并获取列吗? –

+0

不幸的是,如果您对具有不同结构的两个表使用UNION,则必须指定列名称。 –

+0

如果指定列名称有那么多问题,那么你也可以在第二个表格中创建虚拟列来创建匹配结构,但这将是一个蹩脚的方法。 –

1

我认为你可以这样做: 从db1.table1选择*,db1.table2

+0

这将返回两个表的连接,而我希望它们都在同一个表或select语句中,但没有连接。 –

1

一个工会的工作,但不要使用*,你将需要添加一个“额外“列添加到第一个表上的SELECT(但该列不必实际存在于表中,它只是添加以便选择匹配)。例如:

SELECT t1.id as 'id', 
     t1.attribute as 'attribute', 
     '' as 'attribute1' 
FROM DB1.Table1 as t1 

UNION ALL 

SELECT t2.id as 'id', 
     t2.attribute as 'attribute', 
     t2.attribute1 as 'attribute1' 
FROM DB1.Table2 as t2 
0

在联合中,所有select语句的列数必须相同。所以说“select * from table1 union select * from table2”将不起作用,您需要为任何列数少于最多的列添加虚拟列。

结果会是什么意思?你会得到一个列,有时候会包含客户的邮政编码,有时包括订单总额,有时还包括员工编号。你会怎么做?

如果重点只是将数据库的全部内容转储出来供人类查看,为什么不直接为每个表执行单独的select语句呢?

也许你需要退后一步,看看你正在努力完成什么,而不是纠缠于如何让数据库做一些明确设计的东西,因为它没有意义。