【问题标题】:Merge multiple queries excluding common results合并不包括常见结果的多个查询
【发布时间】:2013-08-14 21:18:55
【问题描述】:

数据:

--Table 1 :
Id ZoneName
----------- --------
20011       Name1
10027       Name1
20011       Name1
20011       Name1
20011       Name1
20074       Name1
20011       Name2
20011       Name2
10059       Name3
20011       Name2

查询:

 Select Top 2 [Id] From Table1 -- First Query
    WHERE ZoneName = 'Name1'
    UNION
    SELECT Top 1 [Id] from Table1 -- Second Query
    WHERE ZoneName = 'Name1'
    UNION
    SELECT Top 1 [Id] from Table1 -- Third Query
    WHERE ZoneName = 'Name1'

结果:

Id
-----
20011    

预期结果:

20011
10027
20074

从上面的查询中,我需要每个查询的 3 个不相互重叠的结果,在这种情况下,预期结果应该包含查询 1 的前 2 个,即 20011 和 10027,而对于下一个前 1,它应该排除那些 2查询 2 的结果并返回 20074。

注意:我在此示例中使用了单个 WHERE 条件,但是在实际查询中,每个查询都有不同的 Where 条件,并且最终可能与上面的查询具有相同/不同的结果。

【问题讨论】:

  • 但那是 UNION 的行为。如果你想要重复,那么你需要 UNION ALL。 technet.microsoft.com/en-us/library/ms180026.aspx
  • 我实际上不希望它们之间有重复,但是如何从查询 2 中排除已经为查询 1 返回的内容?
  • 添加了更多解释
  • 添加了实际数据和更多解释!
  • Except 不起作用,因为它将排除查询 1 和 2 之间的结果并且不返回任何结果,您可以修改您的答案以更具体吗?谢谢!

标签: tsql union intersect


【解决方案1】:

据我所知,如果您正在搜索查询特定区域名称的不同 ID,那么这可能会解决

SELECT DISTINCT ID
FROM TABLE1
WHERE ZoneName="Name1"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多