0

假设我在数据库 DB1 中有以下数据:

Table1 id int (50) 属性 varchar(255)

总行数:6550

表 2 id int (50) 属性 varchar(255) 属性 1 varchar(255)

总行数:10550

并可能说更多的桌子。我希望得到所有表中的每一个数据元素。是否有任何 SELECT 语句可以做到这一点?我尝试使用

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

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

问候。

4

4 回答 4

2

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

select id, attribute, '' AS attribute1 from DB1.Table1
UNION ALL 
select id, attribute, attribute1 from DB1.Table2;
于 2013-05-20T17:35:00.253 回答
1

我认为您可以这样做: Select * from db1.table1, db1.table2

于 2013-05-20T17:37:06.037 回答
1

一个 UNION 可以工作,但不要使用 * 并且您需要在第一个表的 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
于 2013-05-20T17:41:01.433 回答
0

在联合中,所有选择语句的列数必须相同。所以说“select * from table1 union select * from table2”是行不通的,你需要为任何列数少于列数最多的表添加虚拟列。

结果意味着什么?你会有一个列,比如说,有时包含客户邮政编码,有时包含订单总额,有时包含员工编号。你会怎么做?

如果只是将数据库的全部内容转储出来供人们查看,那么为什么不为每个表执行单独的选择语句呢?

也许您需要退后一步,看看您要完成什么,而不是纠结于如何让数据库做一些它明确设计不做的事情,因为它没有意义。

于 2013-05-20T18:19:37.200 回答