我有2个包含重复记录的表,包括'Id'字段,我需要将它们联合起来 但我认为[联合所有]比[联盟]更有效率 因为它不需要排序。
以下是我的sql:
SELECT *
来自[dbo]。[实时]
UNION ALL
SELECT *
来自[dbo]。[查询] a
哪里不 EXISTS(
选择TOP 1 1
来自[dbo]。[实时] b
在哪里 a.Id = b.Id
)
你有什么建议或更优雅的陈述吗?
答案 0 :(得分:1)
您的示例sql获取没有记录的记录集在第二个表中,其id相同但可能其他字段不同 这是你的要求吗?
答案 1 :(得分:1)
选项1(你的):首先查询dbo.RealTime,然后查询dbo.Query,然后从dbo.Query查询每一行,在dbo.Realtime上进行查找。
选项2(UNION):查询dbo.RealTime,查询dbo.Query,然后删除重复项。
除了这两个选项会产生不同的结果(第一个选项将保留从dbo.RealTime和dbo.Query获得的重复项)之外,我会说选项2很可能是资源消耗较少,因为它不需要两次查询dbo.RealTime - 除非(可能)dbo.RealTime小于dbo.Query一个数量级。