0

假设出于某种原因,我在两个单独的表中有员工,员工 1 和员工 2

我只想将它们加在一起,就好像它们堆叠在一起一样。

就像是:

select all from employee1 and employee2 where name = bubba

我知道我在概括,这最终将在 postgres 中,所以如果有任何细节,我应该注意谢谢

4

10 回答 10

11
SELECT field1, field2, field2 FROM tableA WHERE field1='x'
UNION
SELECT field1, field2, field2 FROM tableB WHERE field1='x'

UNION ALL如果您想要每条记录,甚至重复,请使用。

于 2009-10-05T14:59:14.810 回答
4

你只想做一个工会

select * from Employee1 where name = 'bubba'
union
select * from Employee2 where name = 'bubba'
于 2009-10-05T14:58:43.407 回答
3

您将需要使用UNION关键字

select * from employee1 where name = 'bubba'
union
select * from employee2 where name = 'bubba'
于 2009-10-05T14:58:29.990 回答
2

在大多数数据库中,您请求的内容称为UNION并像这样编写:

select all from employee1 where name = bubba

UNION

select all from employee2 where name = bubba

这来自关系代数的“联合”运算符,它的原语之一。

请注意,UNION 遵循集合并集,即对于 E1 和 E2 表之间重复的任何行,它只会选择该行的 ONE 副本。如果要选择所有副本,请使用“UNION ALL”运算符。

于 2009-10-05T14:59:18.943 回答
1

我认为您指的是UNION操作。

于 2009-10-05T14:58:26.123 回答
1

如果表具有相同的架构,那么

SELECT * FROM employee1 UNION SELECT * FROM employee2

两个表的列数必须相同,并且列的类型必须相似。

于 2009-10-05T14:59:09.413 回答
1

我猜它是一个工会

选择 * from employee 1 where name = 'bubba'

联盟

select * from employee2 where name = 'bubba'

如果您还想要重复项,请使用 union all。

于 2009-10-05T14:59:34.117 回答
1

你想要的是一个“联合所有”:

select * from employee1
union all
select * from employee2;

列类型和顺序必须匹配,否则您需要在选择列表中提供列列表而不是“*”。可以将“where”子句添加到任一“select”语句或两个“select”语句中。

如果没有“all”,两个查询之间的任何重复行都将折叠成一行。如果那是您想要的,只需删除“全部”。

于 2009-10-05T15:00:06.253 回答
0

正如其他人所提到的,你想要UNION. 但是,如果您真的想要堆叠结果,您应该使用UNION ALL. UNION将删除欺骗,UNION ALL 并包含它们。见http://www.postgresql.org/docs/8.2/interactive/queries-union.html

于 2009-10-05T15:08:47.657 回答
0

对于它的价值, union all 执行起来更快,因为它不需要排序来消除两组中的重复项。

于 2010-01-11T14:58:08.257 回答