2010-01-09 57 views
2

如何在下面的表中选择所有具有-A和b-B(如键值对)的对象?SQL选择两行

喜欢的东西:

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 

回答

4

我想你想这种形式的东西:

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' 
+0

非常感谢。很好的作品:-) – Zardoz 2010-01-09 02:43:22

4
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) 
+0

的问题是该对象必须同时具有A和B-B。 因此,您的第一条和第三条声明不起作用。 第二个也许是开始解决这个问题。现在,我必须从该结果表中的所有对象出现两次。问题是如何? : -/ – Zardoz 2010-01-09 02:30:37

+0

也许HAVING COUNT(*)= 2,但我真的不明白这个问题是什么。 – recursive 2010-01-09 05:24:08

1

您甚至可以试试这个

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