找到1列相同的其他列同一个表的不同行

时间:2012-02-01 22:31:12

标签: sql sql-server sql-server-2008 tsql

下面的查询是否正确查找HashCode相同但是PageUrl不同的行的列?这意味着我的数据库规划中基本上会发生冲突。

select T1.PageUrl,T1.HashCode from tblPages as T1 inner join
(select PageUrl,HashCode from tblPages group by PageUrl,HashCode) as T2 on
T1.PageUrl!=T2.PageUrl and T1.HashCode=T2.HashCode

我正在使用64位HashCode。

MS-SQL 2008 R2

2 个答案:

答案 0 :(得分:1)

非常接近,我会这样做:

select T1.PageUrl,T1.HashCode from tblPages as T1 
inner join (select distinct PageUrl,HashCode from tblPages) as T2 
on T1.PageUrl <> T2.PageUrl and T1.HashCode=T2.HashCode

答案 1 :(得分:1)

我使用带有CROSS JOIN子句的WHERE而不是INNER JOIN

SELECT T1.PageUrl,T1.HashCode FROM tblPages AS T1
CROSS JOIN (SELECT DISTINCT PageUrl,HashCode FROM tblPages) AS T2
WHERE T1.PageUrl <> T2.PageUrl AND T1.HashCode = T2.HashCode

原因是优化器会为您提供更好的交叉连接查询计划。 Link to an example