17.10 - 例: 相関サブクエリーにおけるSELECT COUNT(*)の使用 - 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
日本語 (日本)

在庫の本の数が実在庫の本の数と一致する出版社の名前を選択します。

     SELECT pubname, bookcount
     FROM library
     WHERE (bookcount, pubnum) IN (SELECT COUNT(*), book.pubnum
                                   FROM book
                                   GROUP BY pubnum);

在庫の本の数がゼロである出版社の名前は返されません。これはサブクエリーではこの出版社に対する行が返されないからです。

COUNT操作の結果データ型は、次のテーブルで説明するように、ANSIとTeradataセッション モードでは異なります。詳細は、<Teradata Vantage™ - SQL関数、式、および述部、B035-1145>を参照してください。

セッション モード COUNT操作の結果のデータ型
ANSI DECIMAL(p,0)

pは、数値の精度を表わします。

  • DBS制御フィールドMaxDecimalが以下のいずれかの値に設定されている場合、pの値は15です。

    0

    15

    18

  • DBS制御フィールドMaxDecimalが31に設定されている場合、pの値も31です。
  • DBS制御フィールドMaxDecimalが38に設定されている場合、pの値も38です。
Teradata INTEGER

上記のSELECT文と同じ意味になる次のSELECT文では、2つの非相関サブクエリーを使って、以下のように同じ応答セットを返します。

     SELECT pub_name, book_count
     FROM library
     WHERE (book_count, pub_num) IN (SELECT COUNT(*), pub_num
                                     FROM book
                                     GROUP BY pub_num)
                          OR NOT IN (SELECT book.pub_num
                                     FROM book
                                     GROUP BY pub_num)
                                 AND book_count = 0;

次のSELECT文は、もっとシンプルできれいにまとまっています。1つの相関サブクエリーを使って、前の問合わせと同じ正確な応答を返します。

     SELECT pub_name, book_count
     FROM library
     WHERE book_count IN (SELECT count(*)
                          FROM book
                          WHERE book.pub_num = library.pub_num);