1

我有两个结构相同的表,比如说 TA 和 TB。TA 和 TB 中的大多数记录是相同的。TA 中有些记录不在 TB 中,有些在 TB 中的记录不在 TA 中。我只想从 TA 和 TB 中获取所有记录而没有重复:

Select * from TA
Union
Select * from TB

这个查询确实给了我想要的结果。但是性能不如生产环境好,两张表都有50多万条数据。有没有一种简单的方法可以从两个表中获取所有记录?两个表都有一个 id 列,该列具有唯一值并且可以连接。

4

4 回答 4

2

尝试:

SELECT COALESCE(A.ID,B.ID), COALESCE(A.field2,B.field2), etc.
FROM A
FULL JOIN B
 ON A.Id = B.ID
于 2013-06-21T20:09:10.107 回答
2

您可以使用NOT EXISTS+ UNION ALL

Select * from TA
UNION ALL
Select * from TB where not exists (select * from TA where TA.KEY_ID = TB.KEY_ID)

这会让你所有的数据都TA来自TB.

于 2013-06-21T20:07:48.523 回答
0

The only way to make this faster is to use UNION ALL which as you said there are duplicates, is problematic.

UNION is extremely efficient, optimized, and simple. There is no better way, unfortunately.

于 2013-06-21T19:55:04.007 回答
0

UNION在排除重复项时非常慢。如果您在这些表上有一个键,请尝试向WHERE第二个表添加一个子句以排除重复项。你会比 db.

于 2013-06-21T19:57:49.527 回答