2

我想做一个 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

有人知道如何实现吗?

4

2 回答 2

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似乎工作正常。

于 2012-08-22T19:39:55.903 回答
0

方法一:

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'

方法二:

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 和 type 的基数。后者保证提供表的适当子集。

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

于 2012-08-22T19:53:33.080 回答