Sql 是否根据另一个表中的条件在表中选择记录?
我有两张桌子,A,BSql 是否根据另一个表中的条件在表中选择记录?,sql,Sql,我有两张桌子,A,B A: id is primary key and indexed id, type_id, status ------------------ 1, 1, True 2, 1, False 3, 2, False ... B: (Type) type_id is primary key and indexed type_id, param ---------- 1, 23 2, 35 3, 24 我想选择B中的所有行,该行在A中至少有一个与状态
A: id is primary key and indexed
id, type_id, status
------------------
1, 1, True
2, 1, False
3, 2, False
...
B: (Type) type_id is primary key and indexed
type_id, param
----------
1, 23
2, 35
3, 24
我想选择B
中的所有行,该行在A
中至少有一个与状态为True的相关条目
select distinct B.id, B.param
from B
join A on A.type_id = B.type_id
where A.status = true
这是一种好方法吗?我将这样做(它应该在大多数数据库系统中有效:
SELECT B.*
FROM B
WHERE B.type_id
IN
( SELECT A.type_id
FROM A WHERE status='True'
);
select *
from b
where type_id in (
select type_id
from a
where status = true
)
对于你的问题,如果你的是一个好方法,我的答案是不,这不是一个好方法,因为它可能会强制一个大的中间记录集(通过加入),然后在中间记录集上进行耗时的分离
更新
经过一番思考,我意识到没有绝对的好或坏的解决方案。这完全取决于每个表中的数据(总记录、值分布等)。因此,请继续使用明确传达意图的解决方案,并准备在生产中遇到性能问题时尝试不同的解决方案。解释您的解决方案比OPs更好/更快解释您的解决方案比OPs更好/更快