Рассмотрим таблицу (имя 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, и есть несколько терминов, принадлежащих либо к категории 1, либо к категории 2. Я пытаюсь найти термины, которые имеют один и тот же 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, то нет необходимости иметь результат в обратном порядке. Итак, как я должен получить результаты один раз?
Спасибо за помощь,