我有两个具有相同结构的表,比方说TA和TB。 TA和TB中的大多数记录都是相同的。 TA中有一些记录不是结核病,而一些结核病患者不是TA。我只想得到TA和TB的所有记录,而不是两面性:
Select * from TA
Union
Select * from TB
这个查询确实给了我想要的结果。但是在生产方面表现并不好,两个表中的数据都超过50万。是否有一种简单的方法可以从两个表中获取所有记录?两个表都有一个id列,它具有唯一的值,可以通过它连接。
答案 0 :(得分: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
中的非重复数据。
答案 1 :(得分:2)
尝试:
SELECT COALESCE(A.ID,B.ID), COALESCE(A.field2,B.field2), etc.
FROM A
FULL JOIN B
ON A.Id = B.ID
答案 2 :(得分:0)
使速度更快的唯一方法是使用UNION ALL
,正如您所说的有重复,这是有问题的。
UNION
非常高效,优化且简单。不幸的是,没有更好的方法了。
答案 3 :(得分:0)
UNION
相当慢。
如果您在这些表上有密钥,请尝试在第2个表中添加WHERE
子句以排除重复项。
你会比db更加智能。