EXISTS述部とNOT IN +NULLの比較 - Teradata Database - Teradata Vantage NewSQL Engine - EXISTS/NOT EXISTS関数、EXISTS述部およびNOT INとNull。

Teradata Vantage™ SQL関数、演算子、式および述部

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/xzf1512079057909.ditamap
dita:ditavalPath
ja-JP/xzf1512079057909.ditaval
dita:id
B035-1145
Product Category
Software
Teradata Vantage

以下の条件が真の場合は、NOT INの代わりにNOT EXISTS述部を使用してください。

  • NOT IN条件のいずれかの列がnull可能として定義されている。
  • 主問合わせから、NOT IN条件のいずれかの列にnullが入っているいずれかの行が常に返される必要がある。
  • Subqueryの選択リストで返されるnullによって、主問合わせが行を返すのが妨げられてはならない。

例えば、以下の問合わせについてこれまでのすべての条件が真になる場合は、NOT INではなくNOT EXISTSを使用してください。

   SELECT dept, DeptName 
   FROM Department 
   WHERE Dept NOT IN 
    (SELECT Dept 
     FROM Course);

NOT EXISTSを使用したバージョンは次のようになります。

   SELECT dept, DeptName
   FROM Department 
   WHERE NOT EXISTS
    (SELECT Dept 
     FROM Course 
     WHERE Course.Dept=Department.Dept);

つまり、Course.DeptとDepartment.Deptのいずれかがnull可能であり、DepartmentからDeptのnullの行が返される必要があり、Course.Deptのnullが、Departmentから行が返されるのを妨げてはならないということです。