DELETE文の中のサブクエリー - Teradata Database - Teradata Vantage NewSQL Engine - DELETE文の中のサブクエリー

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

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