SQL - получение отличного идентификатора - PullRequest
3 голосов
/ 13 июня 2011

У меня есть таблица со следующими данными:

ID   NAME    ATTRIBUTE   CODE
=============================
1     XX         MM        GC
1     XX         ST        GC
2     ZZ         LL        GC
2     ZZ         ST        GC
3     AA         MM        PC

Мне нужно ID, имя из таблицы, которая содержит либо MM Атрибут, либо GC код, но не оба.Как запрос должен получить ID числа только 2 и 3, но не 1.

Как мне это сделать?

Ответы [ 6 ]

2 голосов
/ 13 июня 2011
Select Id, Name

From #t
Where (Attribute = 'MM' Or Code = 'GC')
And Id Not In (Select Id From #t 
                Where (Attribute = 'MM' And Code = 'GC'))
1 голос
/ 13 июня 2011
select distinct T1.ID,
                T1.NAME
from T as T1
where (T1.ATTRIBUTE = 'MM' or T1.CODE = 'GC') and
      not exists (select *
                  from T as T2
                  where T1.ID = T2.ID and
                        T2.Attribute = 'MM' and
                        T2.CODE = 'GC')

Результат:

ID  NAME
2   ZZ
3   AA
0 голосов
/ 13 июня 2011
(
    SELECT ID, NAME FROM TableName WHERE CODE = 'GC'
    EXCEPT
    SELECT ID, NAME FROM TableName WHERE ATTRIBUTE = 'MM'
)
UNION
(
    SELECT ID, NAME FROM TableName WHERE ATTRIBUTE = 'MM'
    EXCEPT
    SELECT ID, NAME FROM TableName WHERE CODE = 'GC'
)
0 голосов
/ 13 июня 2011

выберите отдельный идентификатор, имя из тбл? где (атрибут = «ММ» или код = «ГК») а не (атрибут = «ММ» и код = «ГК»)

0 голосов
/ 13 июня 2011

Попробуйте это:

SELECT ID, NAME
  FROM <YOUR-TABLE-NAME>
 WHERE 
 (ATTRIBUTE = 'MM' AND CODE <> 'GC') OR
 (ATTRIBUTE <> 'MM' AND CODE = 'GC') ;
0 голосов
/ 13 июня 2011

Попробуйте это:

select distinct ID
from TableName
where (Attribute = 'MM' or Code = 'GC')
  and not (Attribute = 'MM' AND Code = 'GC')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...