递归SQL命令和重复结果?

时间:2014-05-07 12:55:40

标签: sql sql-server recursion sql-server-2012

我想知道我是如何处理使用DISTINCT删除重复结果是处理递归调用的最佳方法。这是我的代码示例:

with cte as(
SELECT
dbo.Users.Username,
dbo.Contacts.FirstName,
dbo.Contacts.LastName,
tenant.Name,
tenant.Id,
tenant.ParentTenantId
FROM
dbo.Tenants AS tenant
INNER JOIN dbo.Users ON tenant.Id = dbo.Users.TenantId
INNER JOIN dbo.Contacts ON dbo.Users.ContactId = dbo.Contacts.Id
where tenant.Id = '6CD4C969-C794-4C95-9CA2-5984AEC0E32C'

union all

SELECT 
dbo.Users.Username,
dbo.Contacts.FirstName,
dbo.Contacts.LastName,
childTenant.Name,
childTenant.Id,
childTenant.ParentTenantId
FROM
dbo.Tenants AS childTenant
INNER JOIN dbo.Users ON childTenant.Id = dbo.Users.TenantId
INNER JOIN dbo.Contacts ON dbo.Users.ContactId = dbo.Contacts.Id
INNER JOIN cte on childTenant.ParentTenantId  = cte.Id)

select DISTINCT UserName, FirstName, LastName, Name, Id, ParentTenantId  from cte ORDER BY Id

结果如下: results of distinct

以下是不使用DISTINCT关键字的结果 enter image description here

虽然DISTINCT有效,但我想知道这是否是处理重复结果的最佳方式,或者我是否应该以某种方式重写我的查询。

1 个答案:

答案 0 :(得分:1)

我不确定这是否是这种情况,但是一个常见的误解是,distinct是适用于某个列的函数。区别适用于行,即:

select distinct(x), y from t

与:

相同

select distinct x, y from tselect distinct x, (y) from t

此外:

select x, distinct(y) from t

是无效的构造