1

2 つのジャンル (カテゴリ) に属するすべての movies_name を取得しようとしています。

つまりスキーマ

movie_id  genre
4         Action
4         Comedy

SQL:

SELECT movies.movie_name
FROM movies
INNER JOIN tags
ON movies.movie_id = tags.movie_id
WHERE tags.genre = 'Comedy'
AND tags.genre = 'Action'

これにより、movie_id 4 の movie_name が返されるはずです。

テストデータを使用して3つの結果が得られることがわかっている場合、クエリが間違っているのでしょうか。

4

2 に答える 2

4
SELECT movies.movie_name
FROM movies
INNER JOIN tags
ON movies.movie_id = tags.movie_id
WHERE tags.genre IN ('Comedy','Action')
GROUP BY movies.movie_name
HAVING COUNT(*) = 2

各映画のジャンルに一意の制約が指定されていない場合は、追加する必要がありますDISTINCT

SELECT movies.movie_name
FROM movies
INNER JOIN tags
ON movies.movie_id = tags.movie_id
WHERE tags.genre IN ('Comedy','Action')
GROUP BY movies.movie_name
HAVING COUNT(DISTINCT tags.genre) = 2
于 2012-11-17T15:51:46.907 に答える
0

Tags.genre同時に「コメディ」と「アクション」の両方にすることはできません。IN次のような句が必要です。

`SELECT fields FROM tables WHERE tags.genre IN ('コメディ', 'アクション')

于 2012-11-17T15:52:22.820 に答える