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,并且有多个术语属于 category1 或 category2。我试图在这两个类别中或在这两个类别中的一个类别中找到具有相同 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

这工作正常,但每行返回两次......例如,

TermId1、TermId2 TermId2、TermId1

如果 termId1 与 termId2 不同,则不需要逆序结果。那么,我应该如何获得一次结果呢?

感谢您的帮助,

4

1 回答 1

1

试试这个。您可能不需要 group by

    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 回答