17.05 - DELETE文の中のサブクエリー - Advanced SQL Engine - Teradata Database

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

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

DELETE文の述部には、削除ターゲット テーブルや他のテーブルを参照したsubqueryを組み込むことができます。次のDELETE文は、その例です。

     DELETE FROM publisher
     WHERE 0 = (SELECT COUNT(*)
                FROM book
                WHERE book.pub_num=publisher.pub_num);

図書館に本がある出版社が2社、ない出版社が2社あります。

このサブクエリーは、外部参照であるpublisherテーブルの各行ごとに1回ずつ実行されます。図書館に本がない出版社が2社あるため、その2社の2つの行がpublisherテーブルから削除されます。

このDELETEを変更して、非相関サブクエリーを使用するには、サブクエリーのコードを修正して、参照するテーブルをすべてサブクエリーのFROM句に入れます。

     DELETE FROM publisher
     WHERE 0 = (SELECT COUNT(*)
                FROM book, publisher
                WHERE book.pub_num=publisher.pub_num);

このように記述すると、subqueryの述部にローカルの定義参照が入るため、DELETE文には相関subqueryは入らなくなります。カウントは1回で確定され、値がゼロにはならないため、行は削除されません。