2012-02-01 4 views
0

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 비트 해시 코드를 사용하고 있습니다.

MS-SQL 2008 R2

+0

변경! = <>. – Sparky

+0

FYI! = MySQL, <>은 MS SQL –

+0

항상 사용하고 있습니다! = 그리고 항상 MSSQL에서 작동합니다. 어떤 차이가 있습니까? – MonsterMMORPG

답변

1

내가 당신 INNER JOIN보다는 WHERE 절과 함께 CROSS 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.

+0

감사합니다. – MonsterMMORPG

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 
+0

어떻게 사용합니까? OP의 쿼리와 다른 점 은요? –

+0

그의 질문은 그의 질문이 맞는지 여부입니다. 필자는 내부 쿼리에서 그룹이 아닌 SQL-Server <>를 사용하는 것이 좋습니다! = – Sparky

관련 문제