我想知道我是如何处理使用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
结果如下:
以下是不使用DISTINCT
关键字的结果
虽然DISTINCT
有效,但我想知道这是否是处理重复结果的最佳方式,或者我是否应该以某种方式重写我的查询。
答案 0 :(得分:1)
我不确定这是否是这种情况,但是一个常见的误解是,distinct是适用于某个列的函数。区别适用于行,即:
select distinct(x), y from t
与:
相同 select distinct x, y from t
或select distinct x, (y) from t
此外:
select x, distinct(y) from t
是无效的构造