SQL:从两个表中选择类似列

10

我有一个包含两个表Table1Table2的数据库。它们都有一个共同的列[ColumnA],类型为nvarchar

我该如何从这两个表中选择这个列,并将其作为单个列返回到结果集中?

所以我想要的是类似于:

ColumnA in Table1:
a
b
c

ColumnA in Table2:
d
e
f

Result set should be:
a
b
c
d
e
f
8个回答

16
SELECT ColumnA FROM Table1 UNION Select ColumnB FROM Table2 ORDER BY 1

此外,如果你确定Table1和Table2中的内容永远不会重叠,可以使用UNION ALL替代UNION。这样可以节省一些资源。

-- Kevin Fairchild


你可以在第一个查询中使用ORDER BY 1来避免在排序时需要子查询。 - user12861
1
据我所知,特别是 SQL Server,即使没有显式的 ORDER BY,它也会自动按所选列排序。但这仅适用于 UNION 操作,而不适用于 UNION ALL 操作。而且,ORDER BY 在设计意图需要排序时可以提高可读性。 - Andriy M

3

你是否在意是否会得到重复项?

UNION 操作比 UNION ALL 操作更慢,因为 UNION 会筛选掉重复项。


1

使用UNION运算符:

SELECT ColumnA FROM Table1
UNION
SELECT ColumnA FROM Table2

1

联合答案基本正确,取决于重叠值:

SELECT distinct ColumnA FROM Table1
UNION
SELECT distinct ColumnA FROM Table2

如果在Table1中出现了'd'或者在Table2中出现了'c',那么你将会有多行数据包含它们。

0
你可以使用联合选择:
Select columnA from table1 union select columnA from table2 

0
SELECT Table1.*, Table2.d, Table2.e, Table2.f 
FROM Table1 JOIN Table2 ON Table1.a = Table2.a

还是我误解了你的问题?

编辑:看起来我确实误解了。


我最初读问题时和你一样的理解,JesDaw。楼主,如果你解释说“a,b,c”等是ColumnA中的,会更清晰一些,尤其是你同时用字母a表示列名和数值。只是吹毛求疵,我想。 - Ian Varley

0

我相信是这样的:

SELECT columna FROM table1 UNION SELECT columnb FROM table2;

0
在Oracle中(至少),有UNION和UNION ALL两种操作符,其中UNION ALL将返回两个集合中的所有结果,即使存在重复项,而UNION将返回两个集合中不同的结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接