TimesTenでは、検索条件のINSERT...SELECT文、CREATE VIEW文、CREATE VIEW文、UPDATE文またはUPDATEのSET句で、導出された表として副問合せがサポートされます。サポートされるのは、表の副問合せおよびスカラー副問合せです。行の副問合せはサポートされません。副問合せでは、HAVING句または結合表を使用して集計を指定できます。副問合せは相関も可能です。
SQL構文
[NOT] EXISTS | [NOT] IN (Subquery
)Expression
{= | <> | > | >= | < | <= } [ANY | ALL] (Subquery
)Expression
[NOT] IN (ValueList
|Subquery
)
説明
TimesTenでは、各項で説明した特性を持つ問合せがサポートされます。
表の副問合せ
副問合せは、マテリアライズド・ビューを作成する文を除き、任意の文のWHERE句またはHAVING句に指定できます。表の副問合せは、1つの条件に1つのみ指定できます。 これらの条件は、WHERE句やHAVING句、WHERE句やHAVING句内のOR式または結合された表のON句に指定できます。CASE式、マテリアライズド・ビューまたは外部結合のために+演算子を使用するHAVING句には指定できません。
副問合せは、EXISTSまたはNOT EXISTS条件、ANYまたはALLを使用する限定条件または比較条件に指定できます。比較条件および限定条件の両方に使用できる演算子は、=、<、>、<=、>=、<>です。UNIQUEまたはNOT UNIQUE演算子を使用して、副問合せを外部問合せに連結することはできません。
限定条件または比較条件に指定できる副問合せは1つのみです。副問合せは、条件の右側のオペランドまたは左側のオペランドとして指定します。両方には指定しません。
FIRST NumRowsは、副問合せの文ではサポートされていません。
限定条件または比較条件に指定された問合せでは、基礎となるSELECTの選択リストは単一の式にする必要があります。比較条件で指定される問合せの場合に、基礎となるSELECTが単一の行を戻すときは、その戻り値が選択結果になります。基礎となるSELECTが行を戻さない場合、戻り値はNULLです。副問合せが複数の行を戻す場合はエラーになります。
スカラー副問合せ(スカラー副問合せは単一の値を返します)
外部問合せの各行に1行のみを戻すことを、コンパイル時にオプティマイザが検出できないような条件を含むスカラー副問合せは、検証できません。OR式にこのような副問合せを指定することはできません。
例
次に、1件以上の未発送の発注を含む顧客リストの副問合せの例を示します。
SELECT customers.name FROM customers WHERE EXISTS (SELECT 1 FROM orders WHERE customers.id = orders.custid AND orders.status = 'unshipped'); SELECT customers.name FROM customers WHERE customers.id = ANY (SELECT orders.custid FROM orders WHERE orders.status = 'unshipped'); SELECT customers.name FROM customers WHERE customers.id IN (SELECT orders.custid FROM orders WHERE orders.status = 'unshipped');
この例では、発注日と同じ日付に発送されたアイテムをリストします。
SELECT line_items.id FROM line_items WHERE line_items.ship_date = (SELECT orders.order_date FROM orders WHERE orders.id = line_items.order_id);