连接多个表并使用自联接

时间:2013-05-23 12:41:58

标签: mysql group-by

我有一个关于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服务器版本,以获得正确的语法   在'WHERE a.movi​​eid = b.movi​​eid AND a.actorid&lt;&gt; b.actorid GROUP BY附近使用   a.actorid)tablica_t'在第1行

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

2 个答案:

答案 0 :(得分:2)

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

actor d,

actor d

答案 1 :(得分:2)

你非常接近。 &lt;&gt;在原始查询上只需要设置为&lt;或者&gt;但不是&lt;&gt;然后你需要限制你的结果或使用选择最大(计数)方法来获得所有相同的计数。

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

基本上,这就是联合演员本身通过电影获得配对的演员。 &lt;在A.ActorID到B.ActorID上消除了他/她自己和对立面的演员,因此如果存在演员A和B,则不会包括B到A. 按MostFilms降序排序将仅返回最多的那对。 如果两对具有相同的计数,则只会返回其中一个。

如果你需要演员的名字,你可以为每个演员表添加一个连接。