Sql 是否根据另一个表中的条件在表中选择记录?

Sql 是否根据另一个表中的条件在表中选择记录?,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,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
中至少有一个与
状态为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更好/更快