6

标题可能看起来不是很清楚 - 不知道如何用一行来解释问题。

我有 3 张桌子

话题
视频
TOPIC_VIDEO

一个主题可以有一个或两个视频。这些视频要么是示例视频,要么不是。

表中具有相关列名的示例数据

话题

TOPIC_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

TOPIC_VIDEO_ID | TOPIC_ID | 视频ID | IS_SAMPLE    
      1 | 1 | 10 | 是
      2 | 2 | 12 | ñ
      3 | 3 | 13 | ñ
      4 | 3 | 14 | 是
      5 | 4 | 15 | ñ

所以我想做的是为给定的课程选择所有主题及其相应的视频。现在,如果一个主题有多个视频 - 我想选择 is_sample 为“N”的视频。

就像上面的例子一样——topic_id 3 有两个视频,video_id 13 和 14——所以应该选择 video_id 13。

这是我到目前为止的查询

选择主题。*,count(topic.topic_id),video.video_id,topic_video.is_sample
从主题
左加入 topic_video ON topic_video.topic_id = topic.topic_id
left join video ON video.video_id = topic_video.video_id
其中 course_id=1
按 topic.topic_id 分组

所以现在如果计数是 2 - 我想用 is_sample='N' 选择记录这是否可能,我该如何完成。非常感谢您的时间

4

1 回答 1

5

解决这个问题的一种方法是

  • 加入按主题计算计数的内联视图。
  • 使用计数创建一个仅连接到 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 回答