EXISTS述部とNOT IN +NULLの比較 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL関数、式、および述部

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/tpt1555966086716.ditamap
dita:ditavalPath
ja-JP/tpt1555966086716.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から行が返されるのを妨げてはならないということです。