Ограничение записей одной стороной объединения в запросе самостоятельного объединения - PullRequest
0 голосов
/ 28 сентября 2011

Рассмотрим таблицу (имя Термин) следующим образом:

[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, то нет необходимости иметь результат в обратном порядке.Итак, как мне получить результаты один раз?

Спасибо за помощь,

1 Ответ

1 голос
/ 28 сентября 2011

Дайте это попробовать. Возможно, вам не нужна группа по

    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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...