17.10 - 例: 結合を指定したEXPAND ON - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ操作言語

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1146-171K-JPN
Language
日本語 (日本)

この例では、EXPAND ON句を持つ結合の使用方法を示します。

まず、studentテーブルを作成します。

     CREATE SET TABLE student (
       id                 INTEGER,
       name               CHARACTER(10) CHARACTER SET LATIN
                          NOT CASESPECIFIC,
       duration_begin_end PERIOD(DATE))
     PRIMARY INDEX (id);

studentテーブルには、次の行が含まれます。

id Name duration_begin_end
101 ABC 2004-01-01, 2004-12-31

次に、courseテーブルを作成します。

     CREATE SET TABLE course (
       name             CHARACTER(10) CHARACTER SET LATIN
                        NOT CASESPECIFIC,
       student_id       INTEGER,
       course_begin_end PERIOD(DATE))
     PRIMARY INDEX (name);

courseテーブルには、次の行が含まれます。

Name student_id course_begin_end
CPP 101 2004-08-01,2004-08-30
Java 101 2004-07-01,2004-07-30
C 101 2004-04-01,2004-06-30

学生が特定のコースに登録された月を返すSELECT文を実行します。

この文は、WHERE句内で等価条件と不等条件の記述を混ぜて使用し、studentテーブル(INTERVAL型リテラルで拡張され、dtとして別名化されている)とcourseテーブルを結合します。

     SELECT course.name, EXTRACT(MONTH FROM BEGIN(expd)
     FROM (SELECT student_id, expd
           FROM student
           EXPAND ON duration_begin_end AS expd BY INTERVAL '1' MONTH)
                     AS dt, course AS c
     WHERE c.student_id = dt.id
     AND   (BEGIN(c.course_begin_end) < END(expd)
     AND    BEGIN(expd) < END(c.course_begin_end)
     AND    dt.id = 101;

この文は、次の5行を返します。

course-name extract(month from expd)
C 4
C 5
C 6
CPP 8
Java 7

データベースはこの文に対して、9308警告メッセージも返します。