問題タブ [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 投票する
3 に答える
14921 参照

sql - TSQL で WITH を 2 回使用して、私の例のように結果セットをフィルター処理できますか?

このようなことをする必要がありますが、SQL Server 2008 はそれを好みません。私のクエリは実際にはこれよりも複雑であり、これが私がやっていることを達成するための最良の方法ではないことを認識していますが、私は select ステートメントと where ステートメントではなく、WITH ステートメントの機能に焦点を当てています。

WITH stuff1 AS (開始日 > 0 の従業員から名前、開始日、ID を選択)

WITH stuff2 AS ( stuff1 から名前、開始日、ID を選択)

select * from stuff2 where id > 10

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

c# - Linq-to-Sql: 再帰的に子を取得する

CommentID と ParentCommentID を持つ Comment テーブルがあります。コメントのすべての子のリストを取得しようとしています。これは私がこれまでに持っているもので、まだテストしていません。

2 つの質問:

  1. これを改善する明白な方法はありますか?(CTEを使用してSQLでビューを作成することに加えて。)
  2. IEnumerable <Comment>aを IEnumerable<Comment>に譲ることができないのはCommentなぜですか?
  3. この状況で SelectMany を使用する方法はありますか?
0 投票する
4 に答える
4600 参照

sql - 再帰的 SQL CTE とカスタム ソート順

スレッド化された掲示板用の DB スキーマを作成している画像。特定のスレッドに対して適切にソートされたリストを選択する効率的な方法はありますか? 私が書いたコードは動作しますが、私が望むようにはソートされません。

次のデータがあるとします。

したがって、構造は次のようになります。

理想的には、コードでは、結果セットが次の順序で表示されるようにします: 1, 2, 3, 5, 4
問題:私が書いた CTE では、実際には1, 2, 4, 3, 5として返されます。

これは LINQ を使用して簡単にグループ化/順序付けできることはわかっていますが、これをメモリ内で行うのは気が進まないのです。現時点ではそれが最善の解決策のように思えますが...

現在使用しているCTEは次のとおりです。

助けていただければ幸いです。ありがとう!



私は SQL が初めてで、hierarchyid データ型について聞いたことがありません。このコメントからそれについて読んだ後、これを自分のデザインに取り入れたいと思うかもしれません. 今夜これを試して、成功した場合はさらに情報を投稿します.



dance2die の提案を使用して、サンプル データから返された結果を更新します。

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

sql-server - CTEでmaxrecursionを超えた場合はどうすればよいですか?

再帰を実行しているCTEがあります。問題のある空間を想像する最も簡単な方法は、世界中の車で使用されている抵抗器であり、そのすべての情報を入手できます。抵抗器Aは、車のAAA、AAB、およびAACで使用されるDashAssembly D、E、F...ZZで使用されるボードBおよびCで使用されます。

CTEを1つのパーツで動作させ、結果を確認しました。すべて問題ありません(MAXRECURSION 100を使用)。次に、パーツツリーでもう少し一般的なパーツを追加します。ブーム、壊れた。MAXRECURSIONを32767に上げてみましたが、それでも壊れました。データを見ると、この特定の部分がいたるところに使用されています。再帰の第2レベルでは、426人の親がいます。など、6レベルの再帰だと思います。これがMAXRECURSIONを爆撃していることは理にかなっています(私は思います)。

次の質問は、プランBとは何ですか?CTEを使用しない再帰を行ったことがありません。

更新:答えは次のとおりです。循環参照がないことを確認し、再帰テーブルがその結合を適切にフィルタリングしていることを確認してください(2番目の参照は適切に実行しませんでした)。基本的に、私はうんざりして、代わりにそれが私のくだらないSQLスキルであるときに問題となったのは、私のクレイジーなワイルドデータだと思いました。

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

sql - 単一の SELECT ステートメントで複数の共通テーブル式を使用するにはどうすればよいですか?

私は複雑な選択ステートメントを単純化する過程にあるので、一般的なテーブル式を使用すると考えました。

単一の cte を宣言すると正常に機能します。

同じ SELECT で複数の cte を宣言して使用することは可能ですか?

つまり、このSQLはエラーを出します

エラーは

注意。セミコロンを入れてみましたが、このエラーが発生しました

おそらく関係ありませんが、これは SQL 2008 に関するものです。

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

linq-to-sql - linq-to-sql の共通テーブル式 (CTE)?

Linq to SQL で共通テーブル式 (CTE) (以下に示すような) を実行することは可能ですか? 私はCTEとLinq to SQLにかなり慣れていません。

私は現在ストアド プロシージャを無料で使用しています (ただし、決して反対ではありません) ので、完全に必要でない限り、1 つのクエリのためだけにストアド プロシージャに飛びつきたくありません。

これは、Linq to SQLでできるかどうか疑問に思っているSQLで行っていることの例です。

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

sql - CTE は階層をバックアップしますか?

階層データ モデルで特定のレコードのすべての子を見つけることができますが (以下のコードを参照)、特定の子 ID を使用して親/子チェーンをたどる方法がわかりません。これを行う方法を理解するために、誰かが私を正しい方向に向けることができますか? これはLinq to SQLでも可能ですか?

0 投票する
8 に答える
26342 参照

sql-server - SQL Server:CTE再帰を再帰的に追加された行に制限するにはどうすればよいですか?

より簡単な例

より簡単な例を試してみましょう。そうすれば、人々は概念に頭を悩ませることができ、SQLクエリアナライザーにコピーアンドペーストできる実用的な例があります。

階層を持つNodesテーブルを想像してみてください。

クエリアナライザーでテストを開始できます。

必要な出力:

提案されたCTE式で、出力が正しくありません。

実際の出力

注: SQL Server2005†CTEが2000年以前に行っていたことを実行できない場合‡、それは問題ありません。それが答えです。そして、答えが賞金を獲得するので、「それは不可能です」と与える人は誰でも。しかし、私は数日待って、私の問題の解決策がないことで250の評判を取り返しのつかないほど与える前に、それが不可能であることに全員が同意することを確認します。

Nitpickersコーナー

†2008年ではない

‡UDF*に頼ることなく、これはすでに解決策です

*元の質問でUDFのパフォーマンスを改善する方法がわからない場合


元の質問

ノードのテーブルがあり、それぞれに別のノード(またはnull)を指す親があります。

説明のために:

すべての親子関係とそれらの間の世代数を返すテーブルが必要です

すべての直接の親関係の場合:

しかし、祖父母の関係があります:

そして、曽祖父母の関係があります:

だから私は基本的なCTEの初期化を理解することができます:

ここでの問題は再帰的な部分です。もちろん、明白な答えは機能しません。

再帰リスト全体を生成するために必要なすべての情報は、最初のCTEテーブルにあります。しかし、それが許可されていない場合は、次のことを試してみます。

しかし、それは再帰的な要素に結合しているだけでなく、同じ行を何度も再帰的に追加し続けるため、失敗します。

SQL Server 2000では、ユーザー定義関数(UDF)を使用してCTEをシミュレートしました。

そして、それが爆発しないようにする魔法は、where句を制限することでした:WHERE CurrentParents.Generations-@ Generations-1

再帰CTEが永久に再帰するのをどのように防ぎますか?

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

sql-server - 複数の親を持つ子に対して、親子レコードを返す SQL Server 2005 CTE を作成する方法

SQL Server で CTE を試していますが、次のシナリオを機能させるには行き詰まりました。次のような階層テーブルがあります。

予想された結果:

したがって、基本的に親子階層テーブルがありますが、1 つの微妙な違いがあります。それぞれの子は、複数の親を持つ可能性があります。親子レコードを返す CTE の作成について、多くのブログ記事と StackOverflow 投稿を調査しましたが、それらは子のすべての親を返すわけではなく、最初に見つかったものだけを返します。

私が試したCTEの例を次に示します。

(注: 上記の CTE のテーブルと列の名前は、プライバシーを保護するために元の名前から変更されています。)

上記の CTE は正常に動作し、ID:439 から始まるすべての親子レコードを検索しますが、2 つの親があるにもかかわらず、アイテム ID:900 の親を 1 つだけ検索します。

CTEを使用してこれが可能かどうか、またはこれを行う別のSQL方法があるかどうかを誰かに教えてもらえますか?

乾杯。ヤス。