如何通过“Union All”将来自另一个表的记录与不同的id联合起来

时间:2009-06-11 02:37:13

标签: sql sql-server

我有2个包含重复记录的表,包括'Id'字段,我需要将它们联合起来 但我认为[联合所有]比[联盟]更有效率 因为它不需要排序。

以下是我的sql:
SELECT *
来自[dbo]。[实时]
UNION ALL
SELECT *
来自[dbo]。[查询] a
哪里 EXISTS(
 选择TOP 1 1
 来自[dbo]。[实时] b
 在哪里 a.Id = b.Id
  )
  你有什么建议或更优雅的陈述吗?

2 个答案:

答案 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一个数量级。