不确定这是显示什么

时间:2013-05-27 07:42:22

标签: sql

select mvid
from GenreInfo
where genre='Drama' 
and mvid in (
select mvid
from GenreInfo
where genre != 'Drama');

我只是检查我的代码会输出所有专属电视剧和所有不是戏剧的电影吗?

4 个答案:

答案 0 :(得分:2)

您的查询将为您提供Drama和至少一种其他类型的电影 它不会返回专属Drama的电影。

答案 1 :(得分:0)

如果每个mvid只能有一种类型,那么你想要的就像提取表格中的每一部电影一样!

SELECT mvid FROM GenreInfo WHERE genre = 'Drama' OR genre <> 'Drama'

与:

相同
SELECT mvid FROM GenreInfo

答案 2 :(得分:0)

这个查询的结果将是什么(假设每部电影只有一个条目) - 你有效地选择既是戏剧又不是戏剧的电影:)。

如果电影可以分配多种类型,请告诉我们它是如何完成的。另外,编辑您的帖子并告诉我们您使用的数据库。

编辑:对于mvid不唯一(在sql server中工作,但也适用于其他dbs):

select distinct
    gi.mvid
from GenreInfo gi
where gi.genre='Drama' 
    or not exists (
        select 1 from GenreInfo where mvid=gi.mvid and genre='Drama'
    )

答案 3 :(得分:0)

假设表GenreInfo看起来像:

        mVid    Genre
         1      Drama
         2      Drama
         2      SciFi
         3      Drama
         3      SciFi
         4      SciFi

您的查询将返回:2,3

这是因为你基本上是在说: 给我所有的mVid's Genre = Drama(给1,2,3) 并且从那个列表中,给我那些类型不是戏剧的mVids(因为他们也有SciFi而给出2,3)

总的来说,你会得到一个mVids列表,其中Genre是Drama以及至少一种其他类型。

如果您想获得Genre专属戏剧的内容,请执行以下操作:

    SELECT * FROM GenreInfo WHERE Genre = 'Drama' and NOT mVid in (
        SELECT mVid FROM GenreInfo WHERE Genre <> 'Drama'
    )