例: 結合を指定したEXPAND ON - Teradata Database - Teradata Vantage NewSQL Engine - 例: 結合を指定したEXPAND ON

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/fbo1512081269404.ditamap
dita:ditavalPath
ja-JP/fbo1512081269404.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage

この例では、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

Teradata Databaseはこの文に対して、9308警告メッセージも返します。