2015-03-26 3 views
0

Я не самый большой в SQL, и я пытаюсь добиться следующего:Выберите строки, основанные на 2 колонки

У меня есть таблица со столбцами, как так:

id | cup_type | cup_id | name 

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

Я бы очень хотел, чтобы выбрать записи, которые имеют один и тот же cup_id, но разные cup_types

id | cup_type | cup_id | name 
1 | TypeOne | 12  | NameOne 
2 | TypeTwo | 12  | NameTwo 
3 | TypeOne | 13  | NameThree 
4 | TypeTwo | 13  | NameFour 
5 | TypeOne | 14  | NameFive 
6 | TypeOne | 14  | NameSix 

При запуске указанного запроса было бы существо меня следующее:

id | cup_type | cup_id | name 
1 | TypeOne | 12  | NameOne 
2 | TypeTwo | 12  | NameTwo 
3 | TypeOne | 13  | NameThree 
4 | TypeTwo | 13  | NameFour 

Я надеюсь, что я объяснил это хорошо, и дайте мне знать, если больше ясности необходимо.

ответ

1

Этот запрос будет делать трюк

select * from 
yourtable a 
join (select cup_id, count(distinct cup_type) nbType 
     from yourTable 
     group by cup_id) b using(cup_id) 
where b.nbType >= 2; 
  • Получить результирующий набор из таблицы, где вы считаете отчетливые cup_type.
  • Группируйте этот результат по cup_id.
  • Держите cup_id, чтобы мы могли присоединиться к той же таблице, используя этот идентификатор.
  • Возвратите только те, где количество разных типов было не менее двух.
0

Попробуйте что-то вроде этого:

выберите A.id, b.id ....... из t1 в виде, t2, как б, где a.cup_id = b.cup_id и a.cup_type ! = b.cup_type

Смежные вопросы