视图中的 SQL 查询

Posted

技术标签:

【中文标题】视图中的 SQL 查询【英文标题】:SQL query from a View 【发布时间】:2014-05-20 19:11:32 【问题描述】:

所以我有两个名为“视频”和“相关”的数据库表。 “视频”表有 3 列:id、views 和 category。 “related”表有 2 列:a(与表“video”的列 id 相同)和 b(与 a 相关的视频的 id)。

下面是表格“视频”的示例:

ID | 观看次数 | 类别

1 | 11000 |音乐

2 | 13000 |艺术

3 | 14000 |音乐

4 | 60000 |音乐

5 | 80000 |艺术

......

“相关”表的示例

一个 | b

1 | 2

1 | 3

2 | 1

2 | 4

2 | 5

......

如您所见,相关视频的 id 也可以在“视频”表中找到。

所以现在我有了这个视图:

观看次数>=10000 ====> 类别 = '音乐'

我需要将其转换为 SQL 查询。我需要说明以下几点:从所有观看次数超过 10000 的视频 ID 中,哪些相关视频的类别 =“音乐”。

我希望您不会觉得它看起来那么令人困惑...感谢您的宝贵时间,我正在等待任何可能的帮助...

【问题讨论】:

我想你的意思是直接相关,是吗?或者是 1 与 4 相关,因为 1 与 2 相关,而 2 与 4 相关。 显示您的预期结果可能会很好。 是的,我的意思是直接相关。想想 youtube。有一个视频,然后是几个与该视频相关的其他视频。最终结果应包含所有相关视频(b 列)的列表,类别为“音乐”,这些视频与观看次数超过 10000 次的视频相关。这有点令人困惑!如果您看一下我提供的视图,它将变得更加清晰! :D 【参考方案1】:
select * 
from video v1 
where v1.id in (
   select r.a 
   from related r 
   join video v2 on r.b = v2.id 
   where v2.category = 'music' )
and v1.views >= 10000

编辑

在下面的评论中,您要求的内容与原始问题完全不同 - 即,您现在想要相关视频的观看次数超过 10000 次的“音乐”类别中的视频。您的新问题的 SQL 是这样的。

select * 
from video v1 
where v1.id in (
   select r.a 
   from related r 
   join video v2 on r.b = v2.id 
   where v2.views > 10000 )
and v1.category = 'music'

但是,下次您想问与原来不同的问题时,请提出一个新问题。

【讨论】:

这个语句没有给出想要的结果。它还显示不属于“音乐”类别但观看次数超过 10000 次的视频。最终结果应仅显示与观看次数超过 10000 次的视频相关的音乐类别(而不是其他类别)中的视频。但我认为你接近我正在寻找的东西! :D 顺便感谢您的即时回复! 你说从所有观看次数超过 10000 的视频 ID 中,哪些相关视频的类别 =“音乐” - 这正是我给你的。我现在已经为您的新问题添加了答案。

以上是关于视图中的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery SQL:将视图 A 中的子查询作为嵌套表嵌入视图 B

SQL-Server 视图中的 JAva 查询

在 Redmine 核心视图中添加额外的 SQL 查询(插件中的覆盖视图)

Drupal - 为啥在视图中的 SQL 查询中出现“FROM 节点节点”?

视图中的 SQL 查询

Django 视图中的原始 SQL 查询