0

2 人以上のキャスト メンバーを含むすべての映画のリストを見つけようとしています。

select title from Movie where movieID in(
    select movieID
    from Cast
    join MovieHasCast
        on Cast.castID = MovieHasCast.castID
    where cast.name = 'gene wilder'
intersect
    select movieID
    from Cast
    join MovieHasCast
        on Cast.castID = MovieHasCast.castID
    where cast.name = 'richard pryor')

私の代替案は次のようになります。

select title from Movie where movieID in(
    select movieID
    from Cast
    join MovieHasCast
        on Cast.castID = MovieHasCast.castID
    where cast.name = 'gene wilder'
    and movieID in (
        select movieID
        from Cast
        join MovieHasCast
            on Cast.castID = MovieHasCast.castID
        where cast.name = 'richard pryor'))

これは、私がこれをどのように達成しているかのほんの一例です。ただし、このクエリを C# で動的に作成して、映画のリストをジャンル、キャスト メンバーなどでフィルター処理しています。パフォーマンスに関心があります。

これは、このタスクを達成するための最良の方法ですか? これを行うためのより良い方法があるように感じますが、特にユーザーが10個のキャストメンバーを選択でき、そのクエリが非常に大きくなり始めるため、特に方法がわかりません.0レコードを返す可能性があります.

4

1 に答える 1

1

試す

select movie.name
from movie
join moviehascast mc on mc.movieid = movie.id
join cast on cast.id = mc.castid
where cast.name in (@actor1, @actor2)
group by movie.name
having count(1) = @numberOfActorsSearched
于 2013-10-27T01:18:38.703 に答える