[英]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.movieid = b.movieid 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.