根据两个列标准选择记录

时间:2012-08-22 19:26:01

标签: sql sql-server-2005

我想从下表中选择一个SQL查询:

id    type    num
1     a       3
1     b       4
2     a       5
2     c       6

如果它们具有相同的'id'并且类型为'a或b',那么结果将如下所示:

id    type    num
1     a       3
1     b       4

任何人都知道如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

SELECT table1.* 
FROM table1,
(
  SELECT COUNT(*) as cnt, id
  FROM (
    SELECT * 
    FROM table1
    WHERE type = 'a' OR type = 'b'
  ) sub1
  GROUP BY id
  HAVING cnt > 1
)sub2
WHERE table1.id = sub2.id

在这里测试:http://sqlfiddle.com/#!2/4a031/1似乎工作正常。

答案 1 :(得分:0)

方法1:

select a.*
from some_table t
join some_table a on a.id = t.id and a.type = 'a'
join some_table b on b.id = t.id and b.type = 'b'

方法2:

select *
from some_table t
where exists ( select *
               from some_table x
               where x.id   = t.id
                 and x.type = 'a'
             )
  and exists ( select *
               from some_table x
               where x.id   = t.id
                 and x.type = 'b'
             )

第一种技术提供了结果集中重复行的可能性,具体取决于id和类型的基数。后者保证提供表的适当子集。

任何一个查询,假设你在表上定义了合理的索引,都应该提供相当的性能。