問題タブ [common-table-expression]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
12 に答える
193907 参照

sql-server - パフォーマンスの高いCTEテーブルと一時テーブルのどちらですか?

どちらがよりパフォーマンスが高いですか、CTEまたはTemporary Tables

0 投票する
10 に答える
95691 参照

sql - CTEとサブクエリの違いは?

この投稿から次の手順で ROW_NUMBER を使用するには?

回答には 2 つのバージョンがありsub-query、一方は a を使用し、もう一方は aを使用しCTEて同じ問題を解決します。

さてCTE (Common Table Expression)、「サブクエリ」よりも a を使用する利点は何ですか(したがって、クエリが実際に行っていることをより読みやすくします)

CTEオーバーを使用する唯一の利点はsub-select実際に. CTE が単純な (非再帰的な) CTE として使用される場合、これら 2 つの間に他に違いはありますか?sub-query

0 投票する
2 に答える
1158 参照

sql-server - 最後の2つのレコードから返された値からの差(デルタ)を見つけるのに役立ちます

私はMSSQL2005を使用しており、最後の2つのレコードから値を返すCTEクエリを作成しました。次に、これを使用して、返された2つの数字のデルタを見つけます。ある種の作業クエリがありますが、デルタ数値以外のものを取得するのに問題があります。

これが私の質問です:

私が求めているのは、DeltaとNetObjectIDを返すことです。試すたびにエラーが発生します。 data.NetObjectID is invalid in the select list because it is not contained in either an aggregate function or the group by clause.

クエリの最後にgroupbyなどを追加しようとすると、「group」という単語についてさらにエラーが発生します。

私はSQLに比較的慣れていないので、作業を進めていきます。どんな助けでもありがたいことに受けられるでしょう。

0 投票する
6 に答える
15544 参照

sql - 再帰的な CTE がノードを複数回訪問するのを防ぐ

次の単純な DAG を検討してください。

そして、これを説明するテーブル #bar (私は SQL Server 2005 を使用しています):

ここで、最初と最後のエッジ、つまり 1->2 と 3->4 を選択する別の任意の基準があるとします。これらを使用して、グラフの残りの部分を見つけたいと思います。

次のように再帰的な CTE を記述できます ( MSDNの用語を使用しています)。

ただし、これによりエッジ 3->4 が 2 回選択されます。

クエリが既に記述されているサブグラフに再帰するのを防ぐにはどうすればよいですか? クエリの「再帰メンバー」部分で、これまでに再帰 CTE によって取得されたすべてのデータを参照できれば、これを実現できます(そして、既にアクセスしたノードを除く再帰メンバーを示す述語を提供できます)。ただし、再帰メンバーの最後の繰り返しで返されたデータにのみアクセスできると思います。

このような繰り返しが多い場合、これはうまくスケーリングしません。この不必要な追加の再帰を防ぐ方法はありますか?

ステートメントの最後の行で「個別選択」を使用して目的の結果を得ることができることに注意してください

Edit -hainstech は、述語を追加して再帰を停止し、開始セットに明示的に含まれていた再帰パスを除外することを提案しています。つまり、 recurse onlywhere foo.child_id not in (1,3)です。上記のケースでこれが機能するのは、単純だからです。すべての繰り返されるセクションは、ノードのアンカー セット内で始まります。そうでない可能性がある一般的なケースは解決しません。たとえば、エッジ 1->4 および 4->5 を上記のセットに追加することを検討してください。提案された述語を使用しても、エッジ 4->5 は 2 回キャプチャされます。:(

0 投票する
2 に答える
354 参照

sql-server-2008 - 並列処理は結果の数にどのように影響しますか?

次のようなかなり複雑なクエリがあります。

クエリは、cte3が6222 の異なる結果で満たされるようなものです。最終選択では、 cte3でそれ自体とのクロス結合を実行しています(後で、テーブル内のすべての値をテーブル内の他のすべての値と比較できるようにするため)。最後の行に注意してください:

どうやら、これは並列処理をオフにします。

したがって、cte3に6222の結果行がある場合、(6222 * 6221)/ 2、または19353531の結果が後続の交差結合選択になり、最後のmaxdop行が配置されると予想されます。

ただし、maxdop行を削除すると、結果の数は19380454にジャンプします。開発ボックスに4つのコアがあります。

WTF?誰かがこれがなぜであるか説明できますか?このように相互結合する以前のクエリを再検討する必要がありますか?

0 投票する
1 に答える
474 参照

nhibernate - CTE を使用してページ化されたデータ、nHibernate はこれをどのように処理しますか?

現在、CTE を使用してデータのページングを処理していますが、条件クエリで CTE を処理できますか?

0 投票する
3 に答える
605 参照

sql-server - CTE を使用してインデックス付きビューを FREETEXTTABLE しようとすると重大なエラーが発生する

stockView がフルテキスト インデックス付きのインデックス付きビューである場合、次のエラー メッセージが表示されます。データベースは、2005 互換モードの 2008 Express エンジンで実行されています。

コード:

エラー:

内部結合と加重列を削除すると、クエリが機能します。どんなアイデアでも、私は途方に暮れています。

0 投票する
2 に答える
7490 参照

sql-server - SQL Server 2005 で CTE を使用した再帰クエリ

OK、これが私がやろうとしていることです。MSSQL2005 で CTE クエリを使用しています。クエリの目的は、製品カテゴリの親子関係を再帰化し、各カテゴリの下の製品の数を返すことです (これには、子カテゴリに含まれるすべての製品が含まれます)。

現在のバージョンでは、表示されているカテゴリの製品数のみが返されます。その子のいずれかに含まれている可能性のある製品は考慮されていません。

問題を再現するためのデータベース ダンプと、使用したクエリおよび説明を以下に示します。

私が使用していたCTEクエリは次のとおりです。

最初に、「PC.ParentID」を 943 に変更します。表示されている各カテゴリの製品数を示す 3 つのレコードが返されます。

次に、ParentID を943から942に変更して、再実行します。「Cardiology」という名前の 1 件の結果が返されましたが、0 個の製品が表示されています。私の大きな問題は、このレベル (親 942) で、下の子に含まれる製品をカウントして、「ProductCount」として 13 を表示するにはどうすればよいかということです。私はそれを試みましたが、成功しませんでした。

私は、探していることを実行するストアド プロシージャを受け入れています。私は特定の方法に固執していません。したがって、他の提案をいただければ幸いです。

0 投票する
2 に答える
6839 参照

sql - 再帰SQLテーブルで最も低い共通の親を検索します

再帰テーブル(たとえば、マネージャーを持つ従業員)と0..nIDのサイズのリストがあるとします。これらのIDの最も低い共通の親を見つけるにはどうすればよいですか?

たとえば、私のテーブルが次のようになっている場合:

次に、次のIDのセットにより、次の結果が得られます(最初のIDはコーナーケースです)。

これを行う方法?

編集:すべての場合において、親は正しい用語ではないことに注意してください。これは、ツリーの上のすべてのパスの中で最も低い共通ノードです。最も低い共通ノードは、ノード自体にすることもできます(たとえば、この場合[1,8] => 1、ノード1はノードの親ではなく、1ノード1自体です)。

よろしく、ロナルド

0 投票する
2 に答える
825 参照

subsonic - Subsonic 3.0 Simplerepository : プレーン SQL (CTE) を実行するには?

Subsonic を試してみましたが、SimpleRepository によって CTE を実行し、そのクエリから POCO を取得できるようにしたいという問題に遭遇しました。

Simplerepository アプローチを使用している場合、Subsonic 3.0 でダイレクト SQL を実行する方法はありますか?

Northwind db の例で私の問題を説明するには: これらのカテゴリ (1,2,3) のいずれかに属する製品を持つすべての注文を取得したいと考えています。SimpleRepository Select または LINQ でこれを行う良い方法を思いつくことができませんでした。CTE を使用すると、これを数秒で実行できます。

この例:方法: SQL クエリを直接実行する (LINQ to SQL)