2

クエリに少し問題があります。

私は映画データベースを構築しています。3つのテーブルがあります。1つは映画(tblmovie)、1つはジャンル(tblgenre)、1つはこれら2つを接続します(tblmoviegenre)。

これらの3つを結合すると、それぞれ3つのジャンルの映画が3つある場合、9行になります。

ここで、特定のジャンル(たとえば、ID 2と4のジャンル)を含む映画を入手できるようにしたいと思います。これは、各行に1つのジャンルしかないため、1つのジャンルでこれを行う場合にのみ機能します。誰かがこれの回避策を知っていますか?

だから私が試してみると

SELECT tblmovie.name as moviename 
FROM tblmovie as m
LEFT JOIN tblmoviegenre as mg
on m.movieID = mg.movieID
LEFT JOIN tblgenre as g
on mg.genreID = g.genreID
WHERE mg.genreID = 2 
AND mg.genreID = 4

各行には1つのジャンルしかないため、結果は得られません。

4

5 に答える 5

3

このようなことを試してください、

SELECT  movieName
FROM    tableName a       -- of course you need to provide joins here
WHERE   genreID IN (2,4)
GROUP BY movieName
HAVING COUNT(*) = 2

ここでの考え方は、インスタンスの数を、提供したジャンルの総数と一致させることです。

更新1

SELECT tblmovie.name as moviename 
FROM tblmovie as m
          LEFT JOIN tblmoviegenre as mg
               on m.movieID = mg.movieID
          LEFT JOIN tblgenre as g
               on mg.genreID = g.genreID
WHERE mg.genreID IN (2,4) 
GROUP BY tblmovie.name
HAVING COUNT(*) = 2
于 2012-08-29T07:19:02.947 に答える
1

IN句の代わりにAND句を使用します。

SELECT tblmovie.name as moviename 
FROM tblmovie as m
     LEFT JOIN tblmoviegenre as mg
          ON m.movieID = mg.movieID
     LEFT JOIN tblgenre as g
          ON mg.genreID = g.genreID
WHERE mg.genreID IN(2,4)
GROUP BY tblmovie.name
HAVING COUNT(DISTINCT genreID) = 2;
于 2012-08-29T07:23:45.083 に答える
0

SQLクエリでANDの代わりにORを指定してみてください。

于 2012-08-29T07:27:03.177 に答える
0

それを試してみてください:

SELECT tblmovie.name as moviename 
FROM tblmovie as m
LEFT JOIN tblmoviegenre as mg on m.movieID = mg.movieID
                              and mg.genreID in(2,4) 
LEFT JOIN tblgenre as g       on  mg.genreID = g.genreID
于 2012-08-29T07:30:58.830 に答える
0

次のクエリはこの状況で機能すると思います。

SELECT tblmovie.movieName , tblgenre.genereName
FROM tblmoviegenre
WHERE tblmovie.id=tblmoviegenre.tblmovie_id AND tblgenre.id=tblmoviegenre.tblgenre_id
于 2012-08-29T07:31:06.950 に答える