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

时间:2013-10-03 15:31:45

标签: 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

我想选择BAstatus True至少有1个关联条目的所有行select distinct B.id, B.param from B join A on A.type_id = B.type_id where A.status = true

这是一个好方法吗?

2 个答案:

答案 0 :(得分:11)

我会这样做(它应该在大多数数据库系统中都有效:

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

关于你的问题是否是一个好方法的问题,我的答案是否定的,这不是一个好方法,因为它可能会强制设置一个大的中间记录集(通过加入),然后在中间记录集上耗费时间。

<强>更新

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

答案 1 :(得分:1)

SELECT B.*
FROM B
WHERE B.type_id
IN 
( SELECT A.type_id 
  FROM A WHERE status='True'
);