有没有更简单的方法来查询查询

时间:2019-02-04 03:26:49

标签: sql sqlite

我有一个电影表,其中包含年份和电影详细信息,例如标题,电影id(中)和表m_cast,其中我拥有该电影中的所有演员。

我想让所有从未失业超过3年的演员。 (假设演员连续两部电影都失业)

我想到的代码是

select a.yr1 y1 ,  b.yr2 y2 , a.yr1 - b.yr2 diff from 
(select substr(substr(trim(year),-5),0,5) yr1 , * from movie m inner join m_cast p on m.mid = p.mid order by pid , yr1) a ,
(select substr(substr(trim(year),-5),0,5) yr2 , * from movie m inner join m_cast p on m.mid = p.mid order by pid, yr2) b on a.yr1 > b.yr2
where not exists 
(select count(*) from movie m inner join m_cast p on m.mid = p.mid
and cast(substr(substr(trim(year),-5),0,5) as integer) < a.yr1 and cast(substr(substr(trim(year),-5),0,5) as integer) > b.yr2)

自我加入本身需要很多时间。而且滞后和超前功能在我正在使用的SQLite版本中不起作用。

1 个答案:

答案 0 :(得分:0)

我假设电影表中有一个名为year的列,以及一个用于标识演员姓名的列。诸如:year int,actorId int

运行查询的最快方法是从电影表中过滤最近3年,然后按演员的不同年份进行分组。

过滤后的例子 ActorId年 1. 2018年 1. 2018年 1. 2017年 2. 2016年 2. 2017年 2. 2018年

然后按分组并选择独特: 从movieTable组中按具有计数(不同(年))= 3的actorId选择actorId

那只会返回过去三年中工作过的演员。在该列中滤除了演员ID后,就可以连接到包含演员姓名的表。

对不起,我的写作格式是通过手机完成的。

关于, 豪尔赫·D·洛佩兹