0

次のようなテーブル (Term という名前) を考えてみましょう。

[Id] [int] IDENTITY(1,1) NOT NULL,
[CategoryId] [int] NOT NULL,
[Label] [nvarchar](256) NOT NULL,
[Uri] [nvarchar](1024) NOT NULL

ここで、CategoryId 1 と CategoryId 2 という 2 つのカテゴリが定義されており、category1 または category2 のいずれかに属する用語が複数あるとします。これら 2 つのカテゴリ、またはこれら 2 つのカテゴリの 1 つのカテゴリ内で、同じ URI を持つが異なるラベルを持つ用語を見つけようとしています。そのために、自己結合 SQL を作成しようとしました。

SELECT
    t1.Id AS TermId1,
    t2.Id AS TermId2
FROM
    Term t1 INNER JOIN Term t2 ON t1.Uri = t2.Uri
WHERE
    t1.CategoryId IN (@CategoryId1, @CategoryId2) AND
    t2.CategoryId IN (@CategoryId1, @CategoryId2) AND
    t1.Label <> t2.Label

これは正常に動作しますが、各行が 2 回返されます...たとえば、

TermId1、TermId2 TermId2、TermId1

termId1 が termId2 と異なる場合、逆順の結果を得る必要はありません。では、一度結果を得るにはどうすればよいでしょうか。

ご協力ありがとうございました、

4

1 に答える 1

1

これを試してみてください。あなたはによるグループを必要としないかもしれません

    SELECT t1.Id AS TermId1, t2.Id AS TermId2
    FROM
        Term t1 
        INNER JOIN Term t2 
          ON t1.Uri = t2.Uri
         AND t1.Label <> t2.Label
         AND t1.Id < t2.Id      
    WHERE
            t1.CategoryId IN (@CategoryId1, @CategoryId2) 
        and t2.CategoryId IN (@CategoryId1, @CategoryId2)          
    group by t1.Id, t2.Id
    order by t1.Id, t2.Id
于 2011-09-28T16:45:06.903 に答える