2012-02-01 18 views
0

HashCodeが同じですがPageUrlの異なる行の列を見つけるには、以下のクエリが正しいですか?これは基本的に私のデータベース計画における衝突を意味します。同じ列の他の同じ列の1列を検索

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

+0

変更!= <>。 – Sparky

+0

FYI!=はMySQL、<>はMS SQL –

+0

私はいつも!=を使用していて、いつもMSSQLで動作します。何か違いはありますか? – MonsterMMORPG

答えて

1

私はWHERE句ではなく、あなたのINNER JOINCROSS 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

関連する問題