Выберите значения на основе нескольких строк и столбцов - PullRequest
0 голосов
/ 06 марта 2012

У меня есть эта таблица:

id       characteristic      value
 1          color            blue
 1          shape            rectangle
 2          color            green
 2          shape            triangle

Мне нужно выбрать идентификаторы на основе цвета и формы, например, я хочу выбрать идентификаторы, у которых синий цвет, а форма прямоугольная (этобудет возвращать только значение 1).

Первичный ключ является составным (идентификатор + характеристика), поэтому для идентификатора не может быть более одного значения для характеристики.

Кроме того, существует возможностьимеют более или менее характеристики.

Может ли кто-нибудь помочь мне в этом?

С уважением

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

Другой подход, при котором вам не нужно слишком много менять, если меняется число условий:

with conditions as (
   select 'color' as characterstic, 'blue' as value from dual
   union all 
   select 'shape' as characterstic, 'rectangle' as value from dual
)
select id
from characteristics c2
where (characteristic, value) in ( select characteristic, value from conditions )
group by id
having count(*) = (select count(*) from conditions)

Таким образом, вам просто нужно добавить еще одну «строку» в CTE и больше ничего не менять.

2 голосов
/ 06 марта 2012
SELECT  id
  FROM  MyTable t
        JOIN MyTable t2 ON t.id = t2.id
 WHERE  t.characteristic  = 'color' AND t.value ='blue'
   AND  t2.characteristic = 'shape' AND t2.value='rectangle' --just fixed the t1 to t2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...