2016-12-11 6 views
0

ここに問題があります。私は異なるテーブルを持つデータベースを作成しました。私は108映画を持つ "映画"という名前のテーブルがあります。この表には、 「movie_id」(レビューされた映画のIDへのmovie_idへのリンク)、 「review_score」(1から0)の列を含む「レビュー」という名前のテーブル 「id、name、director、year、country」、 テーブル 「レビュー(レビューテキストあり)」 「批評家テーブルの批評家にリンクする」 「批評家」という名前の表は、 「批評家名」と「critics_id」というicludesという名前のテーブルです。 問題は、100本以上の映画がありますが、それらのうち10本だけがレビューされ、レビューされた映画のみをリストアップする必要がありますが、レビューと映画は異なるテーブルにあります。私は単純なコマンドを試してみると、名前を確認し、映画を見直して、レビュー - 私は映画を繰り返すことで巨大なリストを取得する(写真を参照)my table レビューされた映画だけをリストすることができ、 1回だけ? ありがとうございます!レビューされた映画だけをリストする方法は?

答えて

-1

ここで、結合を使用します。ムービーテーブルから選択してレビューテーブルに参加し、レビューに参加したムービーでフィルタします。例えば

:あなたはまた、別のは、あなたの批評家のテーブルに参加追加することができ

SELECT movie.*, review.review_score, review.review 
FROM movie 
LEFT JOIN reviews AS review 
    ON review.movie_id = movie.movie_id -- assuming this column name is correct... 
WHERE review.movie_id IS NOT NULL 

SELECT movie.*, review.review_score, review.review, critic.critics_name 
FROM .... 
LEFT JOIN critics AS critic 
    ON critic.critics_id = review.critics_id 
WHERE critic.critics_id IS NOT NULL 

は、この例は、その中で、作品に参加する方法を強調するためにleft joinを使用していることに注意してください一致するものが見つからない場合、結合された結果はnullになります。

代わりにinner joinを使用した場合、on句に一致しない結果が得られないため、WHERE id IS NOT NULL部分はまったく必要ありません。私は純粋に単数形の名前に複数のテーブル名をエイリアスするASを使用している - また

SELECT movie.*, review.review_score, review.review, critic.critics_name 
FROM movie 
INNER JOIN reviews AS review 
    ON review.movie_id = movie.id 
INNER JOIN critics AS critic 
    ON critic.critics_id = review.critics_id 

アンインナーは、上記検討されている映画だけでなく、評論家の名前を返すの例に参加しました意味論的な理由から。 ASエイリアスがない場合は、reviewscriticsを引き続き使用できます。

+0

大変ありがとう。あなたが私に与えたコードを SELECT movie。*、reviews.review_score、reviews.reviewに変更しました FROMムービー LEFT JOINレビューAS ON reviews.movi​​e_id = movie.id WHERE reviews.movi​​e_idはNULLではありません。 と動作します! – Olli

-2

クエリ以下の希望は、次のことに役立ちます。

明確な映画の
SELECT 
    m.name, 
    c.critics_name, 
    r.review_score, 
    r.review_text 
FROM movies m 
    JOIN reviews r ON r.movie_id = m.id 
    JOIN critics c ON c.critics_id = r.critics_id 

は、以下のようにクエリを変更します

SELECT DISTINCT m.name 
FROM movies m 
    JOIN reviews r ON r.movie_id = m.id 
    JOIN critics c ON c.critics_id = r.critics_id 
関連する問題