sql server语言 - TSQL不返回DISTINCT值



我试图使用DISTINCT获得唯一的主键值,但无法弄清楚为什么DISTINCT不起作用。下面的TSQL(使用Windows Azure SQL Server)试图通过查看地址字段中的第一个数字字符串来识别重复的地址。返回匹配正确,但是重复的值太多了。

SELECT DISTINCT a.Id AS DinstinctID
    ,b.Id AS LeftID
    ,LEFT(b.StreetAddress, CHARINDEX(' ', b.StreetAddress))
    ,LEFT(a.StreetAddress, CHARINDEX(' ', a.StreetAddress))
FROM [User] a
JOIN [User] b ON b.Id != a.Id AND 
    LEFT(a.StreetAddress,CHARINDEX(' ', a.StreetAddress))  = 
       LEFT(b.StreetAddress,CHARINDEX(' ', b.StreetAddress)) 
    AND b.DateSubmitted >= DATEADD(day, -5, CONVERT(DATE, GETDATE())) 

你不是很清楚
Distinct基于所有列
Distinct给出了正确的答案
因为你有b.Id != a.Id所有返回的行都是不同的
我想这就是你要找的
没有理由在两列中返回相同的地址

SELECT distinct a.Id AS DinstinctID
      ,LEFT(b.StreetAddress, CHARINDEX(' ', b.StreetAddress))
FROM [User] a
JOIN [User] b ON b.Id > a.Id 
     AND  LEFT(a.StreetAddress,CHARINDEX(' ', a.StreetAddress))  = 
          LEFT(b.StreetAddress,CHARINDEX(' ', b.StreetAddress)) 
     AND b.DateSubmitted >= DATEADD(day, -5, CONVERT(DATE, GETDATE())) 
order by 2

您可以尝试将字符串转换为二进制并以这种方式进行比较。将帮助您发现是否有任何隐藏字符导致连接条件不按您期望的方式运行。

最新更新