DELETE、SELECT、または UPDATE 文に必要なデータベーステーブルまたはビューを指定します。SELECT 文内で使用される場合、FROM 句は MERGE 文または INSERT 文でも使用できます。
FROM table-expression, ...
table-expression : table-name | view-name | procedure-name | derived-table | lateral-derived-table | join-expression | ( table-expression, ... ) | openstring-expression | apply-expression | contains-expression | dml-derived-table
table-name : [ userid.]table-name ] [ [ AS ] correlation-name ] [ WITH ( hint [...] ) ] [ FORCE INDEX ( index-name ) ]
view-name : [ userid.]view-name [ [ AS ] correlation-name ] [ WITH ( table-hint ) ]
procedure-name : [ owner.]procedure-name ( [ parameter, ... ] ) [ WITH ( column-name data-type, ... ) ] [ [ AS ] correlation-name ]
derived-table : ( select-statement ) [ AS ] correlation-name [ ( column-name, ... ) ]
lateral-derived-table : LATERAL ( select-statement | table-expression ) [ AS ] correlation-name [ ( column-name, ... ) ]
join-expression :
table-expression join-operator table-expression
[ ON join-condition ]
join-operator : [ KEY | NATURAL ] [ join-type ] JOIN | CROSS JOIN
join-type : INNER | LEFT [ OUTER ] | RIGHT [ OUTER ] | FULL [ OUTER ]
hint : table-hint | index-hint
table-hint : READPAST | UPDLOCK | XLOCK | FASTFIRSTROW | HOLDLOCK | NOLOCK | READCOMMITTED | READUNCOMMITTED | REPEATABLEREAD | SERIALIZABLE
index-hint : NO INDEX | INDEX ( [ PRIMARY KEY | FOREIGN KEY ] index-name [, ...] ) [ INDEX ONLY { ON | OFF } ] | CLUSTERED INDEX [ INDEX ONLY { ON | OFF } ]
openstring-expression : OPENSTRING ( { FILE | VALUE } string-expression ) WITH ( rowset-schema ) [ OPTION ( scan-option ... ) ] [ AS ] correlation-name
apply-expression : table-expression { CROSS | OUTER } APPLY table-expression
contains-expression : { table-name | view-name } CONTAINS ( column-name [,...], contains-query ) [ [ AS ] score-correlation-name ]
rowset-schema : column-schema-list | TABLE [owner.]table-name [ ( column-list ) ]
column-schema-list :
{ column-name user-or-base-type | filler( ) } [ , ... ]
column-list :
{ column-name | filler( ) } [ , ... ]
scan-option : BYTE ORDER MARK { ON | OFF } | COMMENTS INTRODUCED BY comment-prefix | { COMPRESSED | AUTO | NOT COMPRESSED } | DELIMITED BY string | ENCODING encoding | { ENCRYPTED KEY key-expression | NOT ENCRYPTED } | ESCAPE CHARACTER character | ESCAPES { ON | OFF } | FORMAT { TEXT | BCP } | HEXADECIMAL { ON | OFF } | QUOTE string | QUOTES { ON | OFF } | ROW DELIMITED BY string | SKIP integer | STRIP { ON | OFF | LTRIM | RTRIM | BOTH }
key-expression : string | variable
contains-query : string
dml-derived-table : ( dml-statement ) REFERENCING ( [ table-version-names | NONE ] )
dml-statement : insert-statement delete-statement update-statement merge-statement
table-version-names : OLD [ AS ] correlation-name [ FINAL [ AS ] correlation-name ] | FINAL [ AS ] correlation-name
table-name ベーステーブルまたはテンポラリテーブル。ユーザー ID を指定すると、他のユーザーが所有するテーブルを修飾できます。ユーザー ID を指定しないと、現在のユーザーの所属グループが所有するテーブルがデフォルトで検索されます。
view-name クエリに含めるビューを指定します。テーブルの場合と同様に、ユーザー ID を指定して、他のユーザーが所有するビューを修飾できます。ユーザー ID を指定しないと、現在のユーザーの所属グループが所有するビューがデフォルトで検索されます。構文ではビューに対してテーブルヒントを指定できますが、このようなヒントの効果はありません。
procedure-name 結果セットを返すストアドプロシージャーです。この句は SELECT 文の FROM 句にのみ適用されます。プロシージャーにパラメーターを指定しない場合でも、プロシージャー名の後のカッコは必要です。オプションのパラメーターの代わりに DEFAULT を指定できます。
ストアドプロシージャーが複数の結果セットを返す場合、最初の結果セットだけが使用されます。
WITH 句を指定すると、プロシージャーの結果セットにカラム名のエイリアスを指定できます。WITH 句を指定する場合、カラム数はプロシージャーの結果セットのカラム数と一致し、データ型はプロシージャーの結果セットのデータ型と互換性がある必要があります。WITH 句を指定しない場合、カラム名と型はプロシージャー定義で設定された名前と型です。次のクエリは、WITH 句の使用方法を示します。
SELECT sp.ident, sp.quantity, Products.name FROM ShowCustomerProducts( 149 ) WITH ( ident INT, description CHAR(20), quantity INT ) sp JOIN Products ON sp.ident = Products.ID; |
Embedded SQL アプリケーションの場合、RESULT 句を使用しないでプロシージャーを作成し、そのプロシージャーが変数結果セットを返す場合には、プロシージャーを参照する SELECT 文の DESCRIBE が失敗することがあります。DESCRIBE の失敗を防ぐには、予測される結果セットスキーマを記述する WITH 句を含めることをおすすめします。
derived-table FROM 句の中で、テーブル名またはビュー名の代わりに SELECT 文を指定できます。このように使用する SELECT 文を派生テーブルと呼び、エイリアスを指定する必要があります。たとえば、次の文には、派生テーブル MyDerivedTable が含まれています。この派生テーブルは、Products テーブル内の製品を UnitPrice でランキングしています。
SELECT TOP 3 * FROM ( SELECT Description, Quantity, UnitPrice, RANK() OVER ( ORDER BY UnitPrice ASC ) AS Rank FROM Products ) AS MyDerivedTable ORDER BY Rank; |
lateral-derived-table 親の文のオブジェクトへの参照 (外部参照) が含まれている場合がある、派生テーブル、ストアドプロシージャー、またはジョインしたテーブル。FROM 句の外部参照を使用する場合は、ラテラル派生テーブルを使用します。
外部参照を使用できるのは、FROM 句のラテラル派生テーブルの前のテーブルに対してだけです。たとえば、SELECT リストの項目に外部参照は使用できません。
テーブルと外部参照は、カンマで区切ります。たとえば、次のクエリは有効です。
SELECT * FROM A, LATERAL( B LEFT OUTER JOIN C ON ( A.x = B.x ) ) myLateralDT; |
SELECT * FROM A, LATERAL( SELECT * FROM B WHERE A.x = B.x ) myLateralDT; |
SELECT * FROM A, LATERAL( procedure-name( A.x ) ) myLateralDT; |
LATERAL ( table-expression) の指定は、LATERAL ( SELECT * FROM table-expression ) の指定と同等です。
openstring-expression OPENSTRING 句は、ファイルまたは BLOB 内を問い合わせ、これらのソースの内容をローセットとして処理するときに指定します。テーブルやビューなどの定義された構造を問い合わせているわけではないため、この句を指定するときは、ファイルまたは BLOB のスキーマ情報も指定して結果セットを生成します。この句は SELECT 文の FROM 句に適用されます。UPDATE 文または DELETE 文ではサポートされません。
ROWID 関数は、OPENSTRING 式で生成されたテーブルの結果セットでサポートされます。
次に示す OPENSTRING 句のサブ句とパラメーターは、ファイルと BLOB 内のデータを定義し、問い合わせるために使用します。
FILE 句と VALUE 句 FILE 句は、問い合わせるファイルを指定するときに使用します。VALUE 句は、問い合わせる BLOB 式を指定するときに使用します。BLOB 式のデータ型は、LONG BINARY と見なされます。VALUE 句の値として、READ_CLIENT_FILE 関数を指定できます。
FILE キーワードと VALUE キーワードをどちらも指定しないと、VALUE が指定されたと見なされます。
FORMAT SHAPEFILE を使用した場合、FILE のみが指定されたと見なされます。
WITH 句
この句は、問い合わせられるデータのローセットスキーマ (カラム名とデータ型) を指定するときに使用します。カラムは直接指定できます (たとえば、WITH ( Surname CHAR(30), GivenName CHAR(30) )
)。また、TABLE サブ句を使用して、スキーマ情報の取得元に使用するテーブルを参照できます (たとえば、WITH TABLE dba.Employees ( Surname, GivenName )
)。指定するテーブルの所有者であるか、または SELECT パーミッションが必要です。
カラムを指定する場合は、入力データ内でスキップするカラムに filler( ) を指定できます (たとえば、WITH ( filler( ), Surname CHAR(30), GivenName CHAR(30) )
)。
OPTION 句 OPTION 句は、エスケープ文字、デリミター、エンコードなど、入力ファイルに使用する解析オプションを指定するときに使用します。サポートされるオプションは、入力ファイルの解析を制御する LOAD TABLE 文のオプションで構成されます。
scan-option 各スキャンオプションの詳細については、LOAD TABLE 文の load-option の説明を参照してください。
apply-expression この句は、左の table-expression のローごとに、右の table-expression を評価するジョイン条件を指定するときに使用します。たとえば、適用式を使用して、テーブル式のローごとに関数、プロシージャー、または派生テーブルを評価できます。
contains-expression テーブル名の後に付ける CONTAINS 句は、テーブルをフィルターして、contains-query で指定した全文クエリに一致するローのみを返すときに使用します。この句を指定すると、score-correlation-name を使用して参照できるスコアカラムとともに、テーブルの一致するローがすべて返されます。score-correlation-name を指定しない場合は、デフォルトの相関名 contains によってスコアカラムを参照できます。
オプションの相関名引数を除き、CONTAINS 句は CONTAINS 探索条件の引数と同じ引数を取ります。
CONTAINS 句にリストされるカラムには、テキストインデックスが必要です。
contains-query は、NULL または空の文字列に設定できません。テキスト設定オブジェクトの設定により contains-query 内のすべての単語が削除されるようになっている場合、contains-expression によって参照されるベーステーブルのローは返されません。
correlation-name correlation-name は、FROM 句の中でテーブルまたはビューに代替名を指定するときに使用します。この代替名は、文のどこからでも参照できます。たとえば、emp と dep はそれぞれ、Employees テーブルと Departments テーブルの相関名です。
SELECT Surname, GivenName, DepartmentName FROM Employees emp, Departments dep, WHERE emp.DepartmentID=dep.DepartmentID; |
dml-statement dml-statement を使用して、ローの選択に使用する DML 文 (INSERT、DELETE、UPDATE、または MERGE) を指定します。実行時には、dml-derived-table で指定された DML 文が最初に実行され、その DML の影響を受けるローが、REFERENCING 句で記述されているカラムを含むテンポラリテーブルにマテリアライズされます。テンポラリテーブルは、dml-derived-table の結果セットを表します。
クエリ内で参照しないために結果をテンポラリテーブルにマテリアライズする必要がない場合は、REFERENCING ( ) または REFERENCING ( NONE ) を使用します。
REFERENCING ( ) または REFERENCING ( NONE ) を指定した場合、更新されたローはクエリで参照されないため、dml-derived-table の結果セットを表すテンポラリテーブルにマテリアライズされません。この場合のテンポラリテーブルは空のテーブルになります。メインの文が実行される前に dml-statement が実行されるようにするには、この機能を使用します。
結果の OLD カラムには、更新操作の対象にするローを検索するスキャンで見つかった値が格納されます。FINAL カラムには、参照整合性チェックが実行され、計算カラムとデフォルトカラムが更新され、すべてのトリガー (FOR STATEMENT タイプの AFTER トリガーを除く) が起動された後に、値が格納されます。
文 | サポートされているテーブルバージョン |
---|---|
INSERT | FINAL |
DELETE | OLD |
UPDATE | FINAL か OLD またはその両方 |
MERGE | FINAL か OLD またはその両方 |
OLD と FINAL の両方の名前を指定した場合、2 つの相関名が使用されます。ただし、これらの名前はどちらも同じ結果セットを示すため、本当の相関ではありません。REFERENCING (OLD AS O FINAL AS F )
と指定した場合、暗黙的なジョイン述部 O.rowid = F.rowid
が含まれます。 O.rowid = F.rowid
.
INSERT 文では、FINAL のみがサポートされています。したがって、INSERT ON EXISTING UPDATE 文によって変更された更新ローの値は、派生テーブルの結果セットには含まれません。代わりに、MERGE 文を使用して insert-else-update 処理を実行します。
dml-derived-table 文は更新可能なテーブルを 1 つのみ参照できます。複数のテーブルに対する更新の場合は、エラーが返されます。また、DML 文が相関サブクエリまたは共通テーブル式に含まれている場合、これらの構成体のセマンティックが不明確になる可能性があるため、dml-statement からの選択は許可されません。
WITH table-hint 句 WITH table-hint 句を使用すると、このテーブルでのみ使用できる動作と、この文でのみ使用できる動作を指定できます。この句を使用すると、独立性レベルを変更せずに、またデータベースまたは接続のオプションを設定せずに、動作を変更できます。テーブルヒントは、ベーステーブル、テンポラリテーブル、およびマテリアライズドビューに使用できます。
WITH table-hint 句は高度な機能です。必要な場合にかぎり、経験を有するデータベース管理者のみが使用してください。また、この設定はすべての状況で適用されるとはかぎりません。
独立性レベル関連のテーブルヒント 独立性レベルのテーブルヒントは、テーブルのクエリを実行するときに独立性レベルの動作を指定する場合に使用します。また、指定したテーブルと現在のクエリにのみ使用するロック方法を指定します。スナップショットの独立性レベルをテーブルヒントとして指定することはできません。
サポートされている独立性レベル関連のテーブルヒントの一覧を示します。
テーブルヒント | 説明 |
---|---|
HOLDLOCK | 独立性レベル 3 と同等の動作を設定します。このテーブルヒントは SERIALIZABLE と同義です。 |
NOLOCK | 独立性レベル 0 と同等の動作を設定します。このテーブルヒントは READUNCOMMITTED と同義です。 |
READCOMMITTED | 独立性レベル 1 と同等な動作を設定します。 |
READPAST | 書き込みロックがかけられたローをブロックするのではなく、無視するようにデータベースサーバーに指示します。このテーブルヒントは独立性レベル 1 でのみ使用できます。READPAST ヒントは、FROM 句の中の相関名がベーステーブルまたは共有されたグローバルテンポラリテーブルを参照する場合のみ考慮されます。それ以外の場合 (ビュー、プロキシテーブル、およびテーブル関数)、READPAST ヒントは無視されます。ベーステーブルの相関名にヒントを指定すると、ビュー内のクエリから READPAST を使用する場合があります。READPAST テーブルヒントを使用すると、サーバー内でロックと述部評価が相互に影響し合うため、異常事態が発生する可能性があります。また、DELETE 文、INSERT 文、または UPDATE 文のターゲットとなるテーブルに READPAST ヒントは使用できません。 |
READUNCOMMITTED | 独立性レベル 0 と同等の動作を設定します。このテーブルヒントは NOLOCK と同義です。 |
REPEATABLEREAD | 独立性レベル 2 と同等な動作を設定します。 |
SERIALIZABLE | 独立性レベル 3 と同等の動作を設定します。このテーブルヒントは HOLDLOCK と同義です。 |
UPDLOCK | ヒントが指定されたテーブルの文によって処理されるローを意図的ロックを使用してロックすることを指定します。影響を受けるローは、トランザクションの終わりまでロックされたままになります。UPDLOCK はすべての独立性レベルで機能し、意図的ロックを使用します。 |
XLOCK | ヒントが指定されたテーブルの文によって処理されるローを排他的にロックすることを指定します。影響を受けるローは、トランザクションの終わりまでロックされたままになります。XLOCK はすべての独立性レベルで機能し、書き込みロックを使用します。 |
Mobile Link 同期に参加しているデータベースにクエリを書き込んでいる場合、同期スクリプトに READPAST テーブルヒントを使用しないことをおすすめします。
詳細については、次の項を参照してください。
アプリケーションの更新回数が多すぎてダウンロードのパフォーマンスに影響が出ているために READPAST を考慮する場合、代替策としてスナップショットアイソレーションを使用する方法があります。
最適化テーブルヒント (FASTFIRSTROW) FASTFIRSTROW テーブルヒントを使用すると、optimization_goal オプションを First-row に設定することなく、クエリの最適化ゴールを設定できます。FASTFIRSTROW を使用すると、SQL Anywhere は、クエリ結果の最初のローをフェッチする時間を短縮するためのアクセスプランを選択します。
WITH ( index-hint ) 句 WITH ( index-hint ) 句を使用すると、クエリオプティマイザープラン選択アルゴリズムを無効にするインデックスヒントを指定できます。また、インデックスを使用してテーブルにアクセスする方法をオプティマイザーに正確に指示できます。インデックスヒントは、ベーステーブル、テンポラリテーブル、およびマテリアライズドビューに使用できます。
NO INDEX この句は、強制的にテーブルを逐次スキャンするときに使用します (インデックスは不使用)。逐次スキャンのコストは非常に高くなる場合があります。
INDEX ( [ PRIMARY KEY | FOREIGN KEY ] index-name [,... ] ) この句は、オプティマイザーがクエリを処理するために使用する必要のあるインデックスを、最大 4 つまで指定するときに使用します。
指定したインデックスが 1 つでも使用できなかった場合はエラーが返されます。
PRIMARY KEY または FOREIGN KEY を指定して、テーブルの PRIMARY KEY インデックスと FOREIGN KEY インデックスの名前が同じ場合のあいまいさを排除できます。
PRIMARY キーまたは FOREIGN キーを指定しないでインデックスヒントにインデックス名を指定すると、テーブルに同じ名前を持つ複数のインデックスが存在する場合、オプティマイザーは標準のインデックスを選択します。標準のインデックスが存在しない場合、オプティマイザーはプライマリキーインデックスを選択します。プライマリキーインデックスが存在しない場合は、外部キーインデックスが代わりに使用されます。
index-name は、インデックスのユーザー ID とテーブル名を指定することで修飾できます。
INDEX 句で指定するインデックスは、そのテーブルに定義されているインデックスにする必要があります。それ以外の場合、エラーが返されます。たとえば、FROM Products WITH( INDEX (Products.xx))
は、インデックス xx が Products テーブルに定義されていない場合、エラーを返します。同様に、FROM Products WITH( INDEX (sales_order_items.sales_order_items))
は、sales_order_items.sales_order_items インデックスが存在していても、Products テーブルに定義されていないため、エラーを返します。
INDEX ONLY { ON | OFF } この句は、データのインデックス専用取得を実行するかどうかを制御するときに使用します。INDEX ONLY ON を使用して INDEX (index-name...) 句を指定すると、データベースサーバーは、指定されたインデックスを使用してインデックス専用取得を実行しようとします。インデックス専用取得の処理で、指定したインデックスが 1 つでも使用できなかった場合は、エラーが返されます (たとえば、インデックスがない場合、または既存のインデックスがクエリを処理できない場合)。
INDEX ONLY OFF を指定すると、インデックス専用取得は行われません。
FORCE INDEX ( index-name )
FORCE INDEX ( index-name ) 構文は互換性のために用意されています。また、複数インデックスの指定はサポートされません。この句は、WITH ( INDEX ( index-name))
と同じです。
CLUSTERED INDEX この句は、オプティマイザーでクラスタードインデックスを使用する必要があること (存在する場合) を指定するときに使用します。ベーステーブル用に存在できるクラスタードインデックスは 1 つのみのため、インデックス名は指定しません。クラスタードインデックスが存在しないか使用できない場合は、エラーが返されます。
FROM 句でストアドプロシージャーの引数としてサブクエリを指定することはできません。たとえば、次の文はエラーを返します。
SELECT *, ( SELECT 12 x ) D FROM sa_rowgenerator( 1,( SELECT 12 x ) ): |
SELECT 文、UPDATE 文、DELETE 文には、文が使用するテーブルを指定するテーブルリストが必要です。
FROM 句の説明はテーブルについてのものですが、特に注意書きがなければビューと派生テーブルにも適用します。
FROM 句は、指定した全テーブルのすべてのカラムで構成される結果セットを作成します。最初に、コンポーネントテーブルのすべてのローの組み合わせが結果セットの中に入ります。次に、JOIN 条件か WHERE 条件、またはその両方の分だけ、通常は組み合わせの数が減ります。
CROSS JOIN には ON フレーズを使用できません。
openstring-expression の FILE 句には DBA 権限または READFILE 権限が必要です。
openstring-expression の TABLE 句では、指定されたテーブルをユーザーが所有しているか、または指定されたテーブルの SELECT パーミッションがユーザーに必要です。
なし
SQL/2008 FROM 句は、SQL/2008 標準の基礎部分です。FROM 句の複雑さは、FROM 句の個々のコンポーネントを標準の該当部分に照らしてチェックする必要があることを意味します。次に、SQL Anywhere でサポートされている、オプションの SQL/2008 言語機能の一部のリストを示します。
CROSS JOIN、FULL OUTER JOIN、NATURAL JOIN は、オプションの SQL/2008 機能 F401 を構成します。
INTERSECT と INTERSECT ALL は、オプションの SQL/2008 機能 F302 を構成します。
EXCEPT ALL は、オプションの言語機能 F304 です。
派生テーブルは、SQL/2008 言語機能 F591 です。
FROM 句のプロシージャー (テーブル関数) は、機能 T326 です。SQL/2008 標準では TABLE キーワードを使用してプロシージャーの出力をテーブル式として識別する必要があるのに対し、SQL Anywhere では TABLE キーワードは不要です。
共通テーブル式は、オプションの SQL/2008 言語機能 T121 です。共通テーブル式の中でネストされた派生テーブルで別の共通テーブル式を使用する方法は、言語機能 T122 です。
再帰テーブル式は、機能 T131 です。共通テーブル式の中でネストされた派生テーブルでの、再帰テーブル式の使用は、オプションの SQL/2008 言語機能 T132 です。
次に示す FROM 句のコンポーネントはベンダー拡張です。
KEY JOIN。
CROSS APPLY と OUTER APPLY。
OPENSTRING。
CONTAINS を使用した table-expression (全文検索)。
dml-statement を派生テーブルとして指定。
すべてのテーブルヒント (WITH、FORCE INDEX、READPAST、独立性レベルのヒントの使用を含む)。
ベンダー拡張の LATERAL ( table-expression )。LATERAL ( select-statement ) は、SQL/2008 標準のオプションの SQL 言語機能 T491 です。
次は、有効な FROM 句です。
... FROM Employees ... |
... FROM Employees NATURAL JOIN Departments ... |
... FROM Customers KEY JOIN SalesOrders KEY JOIN SalesOrderItems KEY JOIN Products ... |
... FROM Employees CONTAINS ( Street, ' Way ' ) ... |
次のクエリは、クエリ内での派生テーブルの使い方を示します。
SELECT Surname, GivenName, number_of_orders FROM Customers JOIN ( SELECT CustomerID, COUNT(*) FROM SalesOrders GROUP BY CustomerID ) AS sales_order_counts( CustomerID, number_of_orders ) ON ( Customers.ID = sales_order_counts.CustomerID ) WHERE number_of_orders > 3; |
次のクエリは、ストアドプロシージャーの結果セットからローを選択する方法を示します。
SELECT t.ID, t.QuantityOrdered AS q, p.name FROM ShowCustomerProducts( 149 ) t JOIN Products p ON t.ID = p.ID; |
次の例は、ファイルを問い合わせる OPENSTRING 句を使用して、クエリを実行する方法を示します。CREATE TABLE 文は、2 つのカラム column1 と columns2 を持つテーブル testtable を作成します。UNLOAD 文は、RowGenerator テーブルからローをアンロードして、ファイル testfile.dat を作成します。SELECT 文では FROM 句の中で OPENSTRING 句を指定し、testtable テーブルと RowGenerator テーブルの両方のスキーマ情報を使用して testfile.dat を問い合わせます。このクエリは値が 49 のローを 1 つ返します。
CREATE TABLE testtable( column1 CHAR(10), column2 INT ); UNLOAD SELECT * FROM RowGenerator TO 'testfile.dat'; SELECT A.column2 FROM OPENSTRING( FILE 'testfile.dat' ) WITH ( TABLE testtable( column2 ) ) A, RowGenerator B WHERE A.column2 = B.row_num AND A.column2 < 50 AND B.row_num > 48; |
次の例は、文字列値を問い合わせる OPENSTRING 句を使用して、クエリを実行する方法を示します。SELECT 文では FROM 句の中で OPENSTRING 句を使用し、WITH 句で与えられるスキーマ情報を使用して文字列値を問い合わせます。クエリは、3 つのローを持つ 2 つのカラムを返します。
SELECT * FROM OPENSTRING( VALUE '1,"First"$2,"Second"$3,"Third"') WITH (c1 INT, c2 VARCHAR(30)) OPTION ( DELIMITED BY ',' ROW DELIMITED BY '$') AS VALS |
次の例は、データ修正文によって修正されたローを選択するためのクエリを実行する方法を示します。この例では、青色の品目の在庫が半分以上減ると、警告が発行されます。
SELECT old_products.name, old_products.quantity, final_products.quantity FROM ( UPDATE Products SET quantity = quantity - 10 WHERE color = 'Blue' ) REFERENCING ( OLD AS old_products FINAL AS final_products ) WHERE final_products.quantity < 0.5 * old_products.quantity; |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |