1

正直なところ、これは宿題の質問ですが、何時間も無駄になっていて、正しく理解できません。間違った数の結果または間違ったデータを返します。

映画の監督や映画の演技に携わるすべての人と、少なくとも5回の場合は、その回数を選択する必要があります。

aとa 、andと(と)のactsテーブルがあります。movie_idperson_iddirectsmovie_idperson_idpersonpidname

私が思いついたのは:

 SELECT p.name,count(d.mid)+count(a.mid) 
    FROM person p
    INNER JOIN  acts a
    ON a.pid=p.pid

    LEFT JOIN  directs d
    ON p.pid=d.pid

    group by p.pid,p.name

    having (count(d.mid) +count(a.mid))>=5

基本的に、私は両方のテーブルのpersondirects一致するテーブルを結合しようとしていますが、についても同じことをしています。問題は、2番目のクエリの結果が含まれていないことです(10本の映画を上映しているアルフレッドヒッチコックが最初から私を悩ませてきました)。person_iddirects

私はsqliteを使用しています。誰かが私に正しい方向へのプッシュを与えることができれば、私はとても幸せです。集約されたサブクエリを回避するようにも指示されました。それらを使用したソリューションがありましたが、実行に15分かかりました。

4

1 に答える 1

2

この質問の目的のために、俳優と監督の間に関連する違いはありません。どちらも関係者です。

それでは、関係者が2つのテーブルに格納されているという事実を隠すビューを作成しましょう。

CREATE VIEW involved AS
SELECT mid, pid, 'actor'    AS role FROM acts
UNION ALL
SELECT mid, pid, 'director' AS role FROM directs

質問は、との単純な結合で解決できますperson。(このrole列は実際には必要ありません。)


注:質問には、誰かが同じ映画の俳優と監督の両方である場合に何が起こるかは記載されていません。roleフィールドを省略してのUNION代わりに使用する場合UNION ALL、これは1つの関与としてのみカウントされます。しかし、それを2つとして数えることは、私にとってより理にかなっています。


別の注意:データベース構造はあなたの質問のためにうまく設計されていません。関与は、そもそも単一のテーブルに保存されている必要があります。しかし、実際には、データベース構造を変更できるという贅沢が常にあるとは限りません。(ビューさえ作成できない場合があります。その場合は、一時ビューを使用するか、ビューをサブクエリとして書き出す必要があります。)

于 2012-10-06T19:26:21.627 に答える