6

タイトルがはっきりしていないように見えるかもしれません。問題を 1 行で説明する方法がわかりませんでした。

私は3つのテーブルを持っています

トピック
ビデオ
TOPIC_VIDEO

トピックには、1 つまたは 2 つのビデオを含めることができます。動画はサンプル動画かそうでないかのどちらかです。

関連する列名を持つテーブルのサンプル データ

トピック

トピック ID | 名前 | COURSE_ID
    1 | Excel - 加算/減算 | 1
    2 | Excel - 並べ替え | 1
    3 | Excel - フィルター | 1
    4 | Excel - 数式 | 1


ビデオ

ビデオ 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

トピック_ビデオ_ID | トピック ID | ビデオ ID | IS_SAMPLE    
      1 | 1 | 10 | よ
      2 | 2 | 12 | N
      3 | 3 | 13 | N
      4 | 3 | 14 | よ
      5 | 4 | 15 | N

だから私がやろうとしているのは、特定のコースですべてのトピックとそれに対応するビデオを選択することです。トピックに複数のビデオがある場合、is_sample を「N」としてビデオを選択したいと考えています。

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

これは私がこれまでに持っているクエリです

select topic.*,count(topic.topic_id),video.video_id,topic_video.is_sample
トピックから
左 参加 topic_video ON topic_video.topic_id = topic.topic_id
ビデオに参加する左 video.video_id = topic_video.video_id
ここで course_id=1
topic.topic_id でグループ化

カウントが 2 の場合 - is_sample='N' でレコードを選択したい これは可能ですか?どうすればこれを達成できますか? お時間をいただきありがとうございました

4

1 に答える 1

5

これを解決する1つの方法は、

  • トピックごとのカウントを計算するインラインビューに参加します。
  • countを使用して、IS_SAMPLE=Nにのみ結合するcaseステートメントを作成します


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 

デモ

出力

| 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 |
于 2012-06-14T17:42:04.567 に答える