标题可能看起来不太清楚 - 不知道如何在一行中解释问题.
我有3张桌子
TOPIC VIDEO TOPIC_VIDEO
一个主题可以有一个或两个视频.视频是否是样本视频.
具有相关列名的表中的示例数据
话题
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,因此应选择video_id 13.
这是我到目前为止的查询
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
所以现在如果计数是2 - 我想用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
Run Code Online (Sandbox Code Playgroud)
产量
| 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 |
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4489 次 |
| 最近记录: |