首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询优化

查询优化
EN

Stack Overflow用户
提问于 2013-08-02 22:17:42
回答 1查看 25关注 0票数 0

我有以下表格

代码语言:javascript
复制
chapters
    id
    title
videos
    id
    chapter_id
    video_url
viewed_videos
    id
    member_id
    video_id
    viewed_date

我现在使用以下查询。

代码语言:javascript
复制
select 
    c.id, 
    c.title, 
    c.duration, 
    c.visible, 
    v.id as vid, 
    v.title as video_title, 
    v.chapter_id, 
    v.duration as video_duration, 
    (select count(*) from viewed_videos where video_id = v.id and member_id=32) as viewed
from chapters as c
left join videos as v
on
c.id = v.chapter_id
where
c.tutorial_id = 19

这是查询所有带有“查看”字段的视频的最佳方式吗?

我认为肯定有比这更好的方式,因为我使用的是子查询。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-02 22:22:15

您不需要子查询。您可以在外部级别进行连接和聚合:

代码语言:javascript
复制
select c.id, c.title, c.duration, c.visible, v.id as vid, v.title as video_title, 
       v.chapter_id, v.duration as video_duration, v.video_token, count(*) as viewed
from chapters as c left join
     videos as v
     on c.id = v.chapter_id left join
     viewed_videos vv
     on vv.video_id = v.id and member_id=32
where c.tutorial_id = 19
group by c.id, v.id;

但是,子查询并不是一件坏事。事实上,子查询的性能很可能比这个版本更好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18026925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档