2014-05-20 176 views
0

所以我有两个名为“视频”和“相关”的数据库表。表“视频”有3列:标识,视图和类别。 “related”表包含2列:a(与表“video”的列id相同)和b(a相关视频的id)。查看SQL查询

这里是表 “视频” 的一个例子:

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查询。我需要声明以下内容:从视频ID高于10000的所有视频ID中,哪些相关视频的category =“music”。

我希望你不觉得它令人费解,因为它似乎...谢谢您的时间,我在等待任何可能的帮助......

+0

我想你是指*直接*相关的,是吗?或者1与4相关,因为1与涉及4的2相关。 –

+0

可能很好地显示您的预期结果。 –

+0

是的,我的意思是直接与youtube相关。有一个视频,然后是其他一些与此相关的视频。最终结果应该包含所有与视频相关的所有相关视频(b栏)的列表,其中“视频”的分类数超过10000个。这有点混乱!如果你看看我提供的视图,它会变得更清晰! :D – user3104367

回答

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' 

但请,你想从原来的问不同的问题,只是做一个新的问题,下一次。

+0

此声明不能给出所需的结果。它还显示不属于“音乐”类别的视频,但它们的视图超过10000个。最终结果应该只显示与视频超过10000个视图相关的类别音乐(不包含其他类别)中的视频。但我认为你接近我所寻找的! :D感谢您的方式立即回应! – user3104367

+0

你说_从所有视频ID高于10000的视频中,哪些相关视频的category =“music”_ - 这正是我给你的。我现在已经为你的新问题添加了一个答案。 –