我想从下表中选择一个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
任何人都知道如何实现这一目标?
答案 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和类型的基数。后者保证提供表的适当子集。
任何一个查询,假设你在表上定义了合理的索引,都应该提供相当的性能。