2

我有一个关于 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 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“WHERE a.movi​​eid=b.movi​​eid AND a.actorid<>b.actorid GROUP BY a.actorid) tablica_t”附近使用正确的语法

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

4

2 回答 2

2

你很接近。原始查询中的 <> 只需设置为 < 或 > 而不是 <>,然后您需要限制结果或使用 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 降序排序将只返回最多的那对。这样做的缺点是,如果两对具有相同的计数,则只会返回其中一对。

如果您需要演员的姓名,您可以为每个演员表添加两个连接。

于 2013-05-23T13:19:15.290 回答
2

FROM 子句中有一个额外的逗号。改变:

actor d,

actor d
于 2013-05-23T12:53:08.763 回答