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

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Published
2021年1月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/vnq1596660420420.ditamap
dita:ditavalPath
ja-JP/vnq1596660420420.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage

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回で確定され、値がゼロにはならないため、行は削除されません。