16.20 - EXISTS述部とNOT IN +NULLの比較 - Teradata Database - Teradata Vantage NewSQL Engine

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

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Release Date
2019年3月
Content Type
プログラミング リファレンス
Publication ID
B035-1145-162K-JPN
Language
日本語 (日本)

以下の条件が真の場合は、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から行が返されるのを妨げてはならないということです。