我试图仅使用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()))
答案 0 :(得分:0)
您可以尝试将字符串转换为二进制文件并进行比较。可以帮助您发现是否有任何隐藏字符导致连接条件无法按预期运行。
答案 1 :(得分:0)
你不是很清楚
区别在于所有列
明显的是给出了正确的答案
因为你有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