найти дубликат в таблице с условием - PullRequest
2 голосов
/ 27 декабря 2011

У меня есть такой запрос:

select a.id, a.color, a.shade from colors a where a.color = 'red'

, который выбирает

ID     | Color      | shade
-------|------------|---------
23     |red         | dark10
525    |red         | light-10

Вопрос:

Как мне найти всезаписи в таблице colors, где имеется несколько (два) вхождения одного и того же color И соответствующие им оттенки НЕ идентичны

например, записи, подобные приведенным ниже, не будут рассматриваться

ID     | Color      | shade
-------|------------|---------
23     |green       | light-10
324    |green       | light-10

1 Ответ

3 голосов
/ 27 декабря 2011

Вы можете сделать это, используя предложение GROUP BY с условием HAVING COUNT (*) = 1:

declare @colors table (
    id int,
    color nvarchar(100),
    shade nvarchar(100)
)

insert into @colors
        select 23, 'red', 'dark10'
union all select 525, 'red', 'light-10'
union all select 23, 'green', 'light-10'
union all select 324, 'green', 'light-10'

select c.*
from @colors c
inner join (
    select color, shade
    from @colors 
    group by color, shade
    having COUNT(*) > 1
) x
    on x.color = c.color
    and x.shade <> c.shade
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...