select id from license where not exists(
select a.id from license a,version b, mediapart c where
c.version_id = b.id and b.cntnt_id = a.cntnt_id and c.is_highdef=1);
此查询不提供结果集中的任何行。即使对外部许可证表和内部许可证表使用不同的别名。
但是,使用NOT IN的这个工作正常:
select id from license where id not in(
select a.id from license a,version b, mediapart c where
c.version_id = b.id and b.cntnt_id = a.cntnt_id and c.is_highdef=1);
有关如何使用NOT EXISTS实现类似查询的任何建议?
这是一个本土的框架,我必须实现这一点,并且不可能编写如下的查询
select id from license a where not exists(
select a.id from version b, mediapart c where
c.version_id = b.id and b.cntnt_id = a.cntnt_id and c.is_highdef=1);
上面的查询有效,但是对于我正在使用的框架,我将不得不在内部查询中使用所有三个表名和别名。
答案 0 :(得分:1)
NOT EXISTS
查询是相关的,但NOT IN
不相关。换句话说,后一版本中子查询的结果与主查询的结果无关。
我怀疑license
中有version
或mediapart
中没有子项的记录,因此它们不属于查询的相关版本。
在不了解有关数据设计的更多信息的情况下,我建议您可能需要使用OUTER JOIN
来确保获得所有license
条记录。