NOT EXISTS查询在Informix上工作时,与NOT IN相同的查询无效

时间:2014-07-24 14:44:38

标签: sql informix not-exists

  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);

上面的查询有效,但是对于我正在使用的框架,我将不得不在内部查询中使用所有三个表名和别名。

1 个答案:

答案 0 :(得分:1)

NOT EXISTS查询是相关的,但NOT IN不相关。换句话说,后一版本中子查询的结果与主查询的结果无关。

我怀疑license中有versionmediapart中没有子项的记录,因此它们不属于查询的相关版本。

在不了解有关数据设计的更多信息的情况下,我建议您可能需要使用OUTER JOIN来确保获得所有license条记录。