【问题标题】:SQL query from a View视图中的 SQL 查询
【发布时间】: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

标签: mysql sql database select views


【解决方案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 中,哪些相关视频的类别 =“音乐” - 这正是我给你的。我现在已经为您的新问题添加了答案。
猜你喜欢
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 2011-08-21
  • 2017-09-06
  • 1970-01-01
  • 2020-11-20
  • 1970-01-01
相关资源
最近更新 更多