我想做一个 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
有人知道如何实现吗?
我想做一个 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
有人知道如何实现吗?
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似乎工作正常。
方法一:
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 的基数。后者保证提供表的适当子集。
假设您在表上定义了合理的索引,则任一查询都应该提供相当等效的性能。