小编典典

根据另一个表中的条件选择表中的记录?

sql

我有2张桌子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具有至少1相关条目Astatus True

select distinct B.id, B.param 
from B
join A on A.type_id = B.type_id
where A.status = true

这是个好方法吗?


阅读 185

收藏
2021-03-17

共1个答案

小编典典

我将以这种方式执行此操作(它在大多数数据库系统中均应有效:

select *
from b
where type_id in (
  select type_id
  from a
  where status = true
)

关于您的问题是否是一个好方法的问题,我的回答是否定的,这不是一个好方法,因为它可能会迫使一个大的中间记录集(通过联接),然后在中间记录集上耗费大量时间。

更新

经过一番思考,我意识到没有绝对的好或坏的解决方案。这完全取决于每个表中的数据(总记录,值分布等)。因此,请继续进行明确的传达意图,并准备在生产中遇到性能问题时尝试不同的意图。

2021-03-17