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 サーバーのバージョンに対応するマニュアルを確認してください。

どこに問題があるのか​​ わかりません、誰か助けてもらえますか?

4

2 に答える 2

2

FROM 句に余分なコンマがあります。変化する:

actor d,

actor d
于 2013-05-23T12:53:08.763 に答える
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 to B.ActorID の < は、actor から自分自身へのアクターとその反対を除外するため、Actor A と B が存在する場合、B to A は含まれません。MostFilms の降順で並べると、最も多いペアのみが返されます。これの欠点は、2 つのペアのカウントが同じ場合、そのうちの 1 つだけが返されることです。

アクターの名前が必要な場合は、キャスティング テーブルごとに 1 つずつ、2 つの結合を追加できます。

于 2013-05-23T13:19:15.290 に答える