使用查询联接和匹配SQL中的表

时间:2019-02-03 10:16:25

标签: sql oracle

所以我试图选择多个表并进行比较 starNumb,来自Star表和Movie表的mvNumb,如果两者匹配,那么我希望它返回/显示starName以及该StarName与mvNumb相关的次数的总数(如果有意义)。

到目前为止,我已经掌握了这个功能,而且还没有发挥作用,我敢肯定这很简单但是很挣扎。

SELECT STARNUMB.STAR, MVNUMB.MOVIE
FROM MOVIES JOIN STAR
where STARNUMB = MVNUMB;

我要从中得到的是如下所示的内容。

第1列 StarName = TestName1

第2列 MovNumb = 1

含义是该明星已经在电影中出现过1次。

表和FD看起来像这样:

粗体=主键

  • Star( starNumb ,starName,brthPlce,starBorn,starDied)
  • MovStar(mvNumb *,starNumb *)。 <-----外键
  • 电影( mvNumb ,mvTitle,yrMde,mvType,crit,mpaa,noms,wrd,dirNumb *)
  • 借用( txNumb ,mvNumb *,borDte,mmbNumb *)
  • 成员( mmbNumb ,mmbName,mmbAddr,mmbCty,mmbSt,numRent,奖金,joinDate)
  • 导演( dirNumb ,dirName,dirBorn,dirDied)**

1 个答案:

答案 0 :(得分:1)

在星星和电影之间存在一个 n-m 关系,这导致了一个桥接表MovStar,您需要将此关系添加到联接中。但是,只要您只想计算每颗星的电影数量,就只需要加入MoviesMovStar

SELECT m.starName, count(*)
FROM MOVIES m JOIN MovStar ms
  on m.STARNUMB = ms.starNumb
group by m.starName
order by 2 desc