この例では、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警告メッセージも返します。