2012-06-14 26 views
6

タイトルが非常にはっきりしないかもしれない - 問題を1行で説明する方法がわかりませんでした。SQLクエリ - カウント条件に基づいてレコードを選択する

私は3つのテーブル

 
TOPIC 
VIDEO 
TOPIC_VIDEO 

トピックを持って、1本のまたは2つのビデオを持つことができます。ビデオはサンプルビデオかどうかです。関連するカラム名

TOPIC

 
TOPIC_ID |   NAME   | COURSE_ID 
    1 | Excel - Add/Subtract |  1 
    2 | Excel - sort   |  1 
    3 | Excel - filter  |  1 
    4 | Excel - formulas  |  1 


VIDEO 

VIDEO_ID | VIDEO_URL 
    10 | www.youtube.com?v=123 
    12 | www.youtube.com?v=345 
    13 | www.youtube.com?v=567 
    14 | www.youtube.com?v=879 
    15 | www.youtube.com?v=443 


TOPIC_VIDEO 

TOPIC_VIDEO_ID | TOPIC_ID | VIDEO_ID | IS_SAMPLE  
     1  | 1 | 10 | Y 
     2  | 2 | 12 | N 
     3  | 3 | 13 | N 
     4  | 3 | 14 | Y 
     5  | 4 | 15 | N 

を持つテーブルで

サンプル・データだから、私は何をしようとしていることは特定のコースのすべてのトピックとそれに対応する動画を選択しています。トピックに複数の動画がある場合は、is_sampleを「N」として動画を選択します。

上記の例のように - topic_id 3にはvideo_id 13と14の2つの動画があるため、video_id 13を選択する必要があります。

これは、カウントは2であるならば、私は今では、これまで

 
select topic.*,count(topic.topic_id),video.video_id,topic_video.is_sample 
from topic 
left join topic_video ON topic_video.topic_id = topic.topic_id 
left join video ON video.video_id = topic_video.video_id 
where course_id=1 
group by topic.topic_id 

を持つクエリです - 私はis_sampleでレコードを選択したい=「N」 が可能これは、どのように私はこれを達成することができます。これを解決する

+0

が複数の 'SELECT'される場合ステートメントを作成するには、カウントを使用します1つのクエリ内のステートメント容認できますか? –

+0

これは、かなりのパフォーマンスヒットの結果となるだろう – Gublooo

答えて

5

一つの方法は、

  • にあるお時間 おかげで多くの話題で数を算出し、インライン・ビューに参加します。
  • のみIS_SAMPLEする合流= N


SELECT * 
FROM topic 
     LEFT JOIN (SELECT topic_id, 
         Count(topic_id) t_count 
        FROM TOPIC_VIDEO 
        GROUP BY topic_id) t 
       ON topic.topic_id = t.topic_id 
     LEFT JOIN topic_video 
       ON topic_video.topic_id = topic.topic_id 
       AND TOPIC_VIDEO.IS_SAMPLE = CASE 
               WHEN t.t_count = 2 THEN 'N' 
               ELSE TOPIC_VIDEO.IS_SAMPLE 
              END 
     LEFT JOIN video 
       ON video.video_id = topic_video.video_id 

DEMO

出力

| TOPIC_ID |     NAME | COURSE_ID | T_COUNT | TOPIC_VIDEO_ID | VIDEO_ID | IS_SAMPLE |    VIDEO_URL | 
------------------------------------------------------------------------------------------------------------------------- 
|  1 | Excel - Add/Subtract |   1 |  1 |    1 |  10 |   Y | www.youtube.com?v=123 | 
|  2 |   Excel - sort |   1 |  1 |    2 |  12 |   N | www.youtube.com?v=345 | 
|  3 |  Excel - filter |   1 |  2 |    3 |  13 |   N | www.youtube.com?v=567 | 
|  4 |  Excel - formulas |   1 |  1 |    5 |  15 |   N | www.youtube.com?v=443 | 
+0

おかげでコンラッド - それについて行く方法はありませんでした - しかし、あなたの説明とデモは、今簡単に見えるように:) - おかげでバンチ – Gublooo

+2

@Gublooo私の喜び。あなたのテーブルフォーマットでは、SQLFiddleの 'Text To DDL'機能を使いやすくなっています。ありがとうございました。 –

関連する問題