select mvid
from GenreInfo
where genre='Drama'
and mvid in (
select mvid
from GenreInfo
where genre != 'Drama');
我只是在检查我的代码是否会输出所有完全是戏剧的电影和所有完全不是戏剧的电影?
select mvid
from GenreInfo
where genre='Drama'
and mvid in (
select mvid
from GenreInfo
where genre != 'Drama');
我只是在检查我的代码是否会输出所有完全是戏剧的电影和所有完全不是戏剧的电影?
您的查询将为您提供该类型的电影Drama
以及至少一种其他类型的电影。
它不会返回独占的电影Drama
。
如果每个 mvid 只能有一个流派,那么您想要的就像提取表中的每一部电影一样!
SELECT mvid FROM GenreInfo WHERE genre = 'Drama' OR genre <> 'Drama'
是相同的:
SELECT mvid FROM GenreInfo
该查询的结果将是空的(假设每部电影只有一个条目)-您实际上是在选择既是戏剧又不是戏剧的电影:)。
如果一部电影可以分配多种类型,请告诉我们它是如何完成的。另外,编辑您的帖子并告诉我们您使用的是什么数据库。
编辑:对于 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'
)
假设表 GenreInfo 看起来像:
mVid Genre
1 Drama
2 Drama
2 SciFi
3 Drama
3 SciFi
4 SciFi
您的查询将返回:2,3
这是因为您本质上是在说:给我所有类型 = 戏剧的 mVid(给出 1、2、3)以及从该列表中,给我那些流派不是戏剧的 mVid(给出 2,3,因为它们有 SciFi还)
所以总的来说,你会得到一个 mvid 列表,其中流派是戏剧以及至少一个其他流派。
如果您想获得那些类型专门为戏剧的,请执行以下操作:
SELECT * FROM GenreInfo WHERE Genre = 'Drama' and NOT mVid in (
SELECT mVid FROM GenreInfo WHERE Genre <> 'Drama'
)