繁体   English   中英

连接多个表并使用自我联接

[英]Connecting multiple tables and using self join

我有关于mysql查询的问题。 我应该做的是找到在大多数电影中一起表演的一对演员。

我有3张桌子:

actor - has id and name

casting - has movieid, actorid and ord

movie - has id (own id, not the one from actor), title, year, score, votes and director.

因此,我做了以下查询:

SELECT *
FROM ( SELECT a.actorid,
b.actorid,
c.name,
d.name,
COUNT(*) AS zajednicka_pojavljivanja
FROM casting a,
casting b,
actor c,
actor d,
WHERE a.movieid=b.movieid AND a.actorid<>b.actorid
GROUP BY a.actorid,b.actorid,c.name,d.name) tablica_temp
ORDER BY zajednicka_pojavljivanja DESC;

我得到的是一个错误:

错误

1064(42000):您的SQL语法错误; 在第1行的'WHERE a.movi​​eid = b.movi​​eid AND a.actorid <> b.actorid GROUP BY a.actorid)tablica_t'附近,查看与您的MySQL服务器版本相对应的手册以获取正确的语法。

我不知道问题出在哪里,任何人都可以帮忙吗?

您在FROM子句中有一个逗号。 更改:

actor d,

actor d

你很亲密 只需将原始查询中的<>设置为<或>,但不设置为<>,然后就需要限制结果或使用select max(count)方法来获取所有相同的计数。

SELECT A.ActorID, B.ActorID, Count(*) MostFilms
FROM Casting A
INNER JOIN Casting B
 ON A.MovieID = B.MovieID and A.ActorID < B.ActorID
Group by A.ActorID, B.ActorID
order by MostFilms Desc
Limit 1

基本上,这就是通过电影将自己的演员配对成演员。 A.ActorID到B.ActorID上的<消除了他/她自己和相反的演员,因此,如果存在演员A和B,则不包括B到A。 MostFilms降序排列将仅返回最大的那对。 失败的原因是,如果两对具有相同的计数,则只能返回其中一对。

如果需要角色的名称,则可以为每个演员表添加两个联接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM