subqueryあなたのコードを持っているが呼び出され、派生テーブル。これはベーステーブルではなく、クエリの実行中に「存続する」テーブルです。ビュー(ビューテーブルとも呼ばれます)と同様に、最近のバージョンでは、クエリ内のテーブルを「定義」する別の4番目の方法であるCTEは、多くの点でテーブルに似ています。あなたはすることができselect、そこから、あなたはそれらを使用することができますfromかにjoin他のテーブルにそれら(ベース又はません!)。
一部のDBMSでは(すべてのDBMSがこれを同じ方法で実装しているわけではありません)、これらのテーブル/ビューは更新可能です。また、我々はできることと、「更新可能」とはupdate、insert中またはdeleteそれらから。
ただし、制限があり、これは予想されています。subqueryが2(または17個のテーブル)の結合であったと想像してください。どういうdelete意味でしょうか?(どのテーブルから行を削除する必要がありますか?)更新可能なビューは非常に複雑な問題です。関係理論の有名な専門家であるクリス・デイトによって書かれた最近の(2012年の)本(完全にこの主題に関する):ビューの更新と関係理論があります。
派生テーブル(またはビュー)が非常に単純なクエリである場合、ベーステーブルが1つだけで(aによって制限される場合がありますWHERE)、noのGROUP BY場合、派生テーブルのすべての行は基礎となるベーステーブルの1行に対応するため、簡単*このからの更新、挿入または削除します。
サブクエリ内のコードがより複雑な場合、派生テーブル/ビューの行を、基礎となるベーステーブルのいずれかの行にトレース/解決できるかどうかに依存します。
SQL Serverについては、MSDNの更新可能なビューの段落で詳細を参照できますCREATE VIEW。
  更新可能なビュー
  
  次の条件が満たされる限り、ビューを介して基になるベーステーブルのデータを変更できます。
  
  
  いずれかを含む修飾、UPDATE、INSERT、およびDELETEステートメントは、唯一のベーステーブルの列を参照する必要があります。
 
  ビューで変更される列は、テーブル列の基になるデータを直接参照する必要があります。列は、次のような他の方法で導出することはできません。
 
  集約関数:AVG、COUNT、SUM、MIN、MAX、GROUPING、STDEV、STDEVP、VAR、とVARP。
 
  計算。他の列を使用する式から列を計算することはできません。集合演算子を用いて形成されている列UNION、UNION ALL、CROSSJOIN、EXCEPT、及びINTERSECT
  演算に量とも更新できません。
 
  修飾されている列は影響を受けませんGROUP BY、HAVINGまたはDISTINCT句。
 
  TOPWITH CHECK OPTION句とともにビューのselect_statementのどこにも使用されません。
 
  
  
  前述の制限FROMは、ビュー自体に適用されるのと同様に、ビューの句内のすべてのサブクエリに適用されます。一般に、データベースエンジンは、ビュー定義から1つのベーステーブルへの変更を明確にトレースできる必要があります。
実際にdeleteはの方が簡単で、より複雑ではありませんupdate。SQL Serverに必要なのは、削除するベーステーブルの行を識別するための主キーまたはその他の方法のみです。ためにupdate、我々は計算列を更新できないことを(むしろ明白な)追加の制限があります。クエリを変更して更新を試みることができます。更新CreatedDateTimeはおそらく問題なく動作しますが、計算RowNumber列を更新しようとするとエラーが発生します。そしてinsert、私たちが持っていないベーステーブルのすべての列に値を指定する必要があるだろうとして、さらに複雑であるDEFAULT制約を。