将嵌套查询转换为连接

convert nested query to join

我有两个表:

entry
    id
    ......

individual
    id,
    entry_id,
    code

其中 entryindividual 具有一对多关系。

我想 select 属于一个条目的所有个人,该条目包含超过 3 个代码在 A=10 和 B=15 之间的个人

我写了这个查询并且有效:

select entry_id,id 
from individual as i 
where i.entry_id in 
  (select entry_id 
  from individual as v 
  where v.code between 10 and 15 
  group by entry_id 
  having count(*) > 3 )

但是速度很慢。

所以我想尝试将其转换为使用连接而不是嵌套查询。

这是一个连接版本,但我不确定它是否会比您的嵌套查询解决方案更快。

select i1.entry_id, i1.id
from individuals as i1 
    join individuals as i2 
        on (i1.entry_id = i2.entry_id)
where i2.vcode between 10 and 15
group by i1.entry_id, i1.id
having count(*) > 3;

请注意,如果 id 或 (id, entry_id) 是 table individuals 的 primary/unique 键,则此查询仅等同于您的查询。

select 
    entry_id, 
    id,
    code
from 
    individuals as i1
where 
    vcode between 10 and 15
    And entry_id in (
        select entry_id from individuals group by entry_id having count(entry_id) > 3
    )

仅当您需要显示条目 table

的值时才加入条目 table