我有两张桌子,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
中status True
至少有1个关联条目的所有行1}
select distinct B.id, B.param
from B
join A on A.type_id = B.type_id
where A.status = true
这是一个好方法吗?
答案 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'
);