Выбор SQL по двум строкам - PullRequest
       11

Выбор SQL по двум строкам

2 голосов
/ 09 января 2010

Как выбрать в таблице, как показано ниже, все объекты, которые имеют a-A и b-B (как пара ключ-значение)?

Что-то вроде:

SELECT DISTINCT(OBJECT) 
  FROM MYTABLE 
 WHERE key = 'a' 
   AND value = 'A' 
   AND key = 'b' 
   AND value = 'B'

... где результат будет 1 и 3.

Я знаю, что этот оператор SQL не работает, но я надеюсь, что он немного объясняет, что я хочу сделать.

И извините за диффузный заголовок. Я просто не знаю, как лучше описать проблему.

object | key | value
---------------------
1   |  a  |   A
1   |  b  |   B
1   |  c  |   C
2   |  a  |   F
2   |  b  |   B
3   |  a  |   A
3   |  b  |   B
3   |  d  |   D

Ответы [ 3 ]

4 голосов
/ 09 января 2010

Я думаю, вы хотите что-то такого вида:

SELECT a.object 
FROM mytable a, mytable b 
WHERE a.object = b.object 
  AND a.key = 'a' AND a.value = 'A'
  AND b.key = 'b' AND b.value = 'B'
4 голосов
/ 09 января 2010
select * 
from mytable 
where (key = a and value = a)
or    (key = b and value = b)

или

select * 
from mytable 
where key = a and value = a
union
select * 
from mytable 
where key = b and value = b

или, в более широком смысле, возможно

select * 
from mytable 
where key = value
and key in (a,b)
1 голос
/ 09 января 2010

Вы даже можете попробовать это

declare @t table(object int, keys varchar(10), value varchar(10))
insert into @t 
    select 1,'a','A' union all  select 1,'b','B' union all
            select 1,'c','C' union all  
    select 2,'a','F' union all  select 2,'b','B' union all
    select 3,'a','A' union all  select 3,'b','B' union all
            select 3,'d','D'
--select * from @t 

Запрос

select object from @t 
where keys = 'a' and value ='A' 
or  keys = 'b'  and value ='B' 
group by object 
having COUNT(object)>1

Выход:

object
1
3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...