我有两个结构相同的表,比如说 TA 和 TB。TA 和 TB 中的大多数记录是相同的。TA 中有些记录不在 TB 中,有些在 TB 中的记录不在 TA 中。我只想从 TA 和 TB 中获取所有记录而没有重复:
Select * from TA
Union
Select * from TB
这个查询确实给了我想要的结果。但是性能不如生产环境好,两张表都有50多万条数据。有没有一种简单的方法可以从两个表中获取所有记录?两个表都有一个 id 列,该列具有唯一值并且可以连接。
尝试:
SELECT COALESCE(A.ID,B.ID), COALESCE(A.field2,B.field2), etc.
FROM A
FULL JOIN B
ON A.Id = B.ID
您可以使用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
.
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.
UNION
在排除重复项时非常慢。如果您在这些表上有一个键,请尝试向WHERE
第二个表添加一个子句以排除重复项。你会比 db.