|
EXISTS キーワードを使用して、サブクエリの結果に行があるかどうかを確認します。サブクエリに行が含まれていれば、True が返されます。
外部クエリが評価する各行について、Pervasive PSQL で、サブクエリからの関連する行があるかどうかが確認されます。Pervasive PSQL は、外部クエリの中でサブクエリからの関連する行に対応する各行を、ステートメントの結果テーブルに含めます。
EXISTS はストアド プロシージャ内のサブクエリにも使用できます。ただし、ストアド プロシージャ内のサブクエリ SELECT ステートメントに COMPUTE 句または INTO キーワードが含まれていてはいけません。
多くの場合、EXISTS を含むサブクエリは IN を使って書き直すことができます。クエリが IN を使用している場合、Pervasive PSQL はより効率的にクエリを処理できます。
次のステートメントは、成績評価点平均が 4.0 の人だけを含むリストを返します。
SELECT * FROM Person p WHERE EXISTS (SELECT * FROM Enrolls e WHERE e.Student_ID = p.id AND Grade = 4.0)
IN を使って、このステートメントを書き直すことができます。
次のプロシージャは、入力パラメーターの値を使って、Person テーブルから ID を選択します。プロシージャの最初の実行(EXEC)では "Exists は true を返しました" が返り、2 番目の EXEC では "Exists は false を返しました" が返ります。
CREATE PROCEDURE ex1(IN :vID INTEGER) AS BEGIN IF EXISTS ('SELECT id FROM person WHERE id < :vID) THEN PRINT 'Exists は true を返しました'; ELSE PRINT 'Exists は false を返しました'; END IF; END; EXEC ex1(222222222) EXEC ex1(1)
|