問題タブ [set-based]

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 投票する
1 に答える
51 参照

sql-server - SQL Select ステートメントを Set-Based select に変換できますか?

SQL クエリを作成して実行する SP があります。最終結果は、一部のレポートに使用されます。ただし、このクエリの実行には長い時間がかかります ( 30 秒を超えると長時間になり、1 分以上かかることもあります)。

セットベースのクエリについて少し読んだことがありますが、この特定のクエリが適切かどうか、または変換する方法があるかどうかはわかりません。私がセットベースについて読んだことのほとんどは、セットベースの方法の SQL のプログラミングと T-SQL におけるセットベースと手続き型プログラミングのアプローチの紹介のような、ループをセットに変更することについて話しているようです。

クエリは次のようになります。

それはちょっと長くて、それを作成する SP が長くなりますが、これをセットベースのクエリに変換できますか?

もしそうなら、どうやってこれを始めますか?

アップデート

実際の実行クエリ プランは次のとおりです。

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

sql-server - クエリが階層的な場合、SQL でカーソルを置き換えることは可能ですか?

データを格納するために、MsSQL に 3 つのテーブルがあります。

最初の 1 つは Children で、ID、Name、Age、FatherID、SchoolID の行が含まれています。

2 番目のものには、FatherID、Name、Age などの父親のデータが含まれています。

3 つ目は、SchoolID と SchoolName、Address などを持つ School です。

(関係は次のとおりです: 複数の子供が同じ父親を持つことができます, 明らかに:) )

リストしたいのは、特定の SchoolID に関連するすべての家族です。

私はカーソルベースのソリューションを知っています:

*カーソルは 2 つの一時テーブルを操作しています。最初のステップでは、特定のスクール ID を持つ子供を 1 つの一時テーブル (@tempfamilymembers) に選択します。

2 番目のステップは、このテーブルから異なるファザー ID を選択し、それを 2 番目の一時テーブル (@fatherids) に保存することです。

次に、これらのファーザー ID をループして、(@fatherids からの) ファーザー ID が一致するファーザーを最初の一時テーブル (@tempfamilymembers) に挿入します。

次に、@tempfamilymembers からすべてを選択して、クエリを完了することができます*

カーソルベースのソリューションは難しすぎて、比較的遅いことに加えて、ループがより良いパフォーマンスを示していると聞いたので、セットベースのアプローチはさらに優れています。

私の質問は次のとおりです。カーソルを作成せずに、どうにかしてこれを達成できますか? (このリストに存在する父親を一度だけリストしたい. 彼に複数の子供がいるとしても. )

0 投票する
0 に答える
24 参照

sql - 複数の一致がある SQL Server セットベースの更新

同じ状況を示すこの質問を見つけました。セット ベースの更新を実行しようとしていますが、更新するテーブルが更新値に使用されているテーブルの複数の行に一致します。最小限の例を以下に示します。

他の質問の回答では、特定の更新値を取得する方法について説明しました。私が疑問に思っているのは、上記の例または他の同様の状況で、SQL Server はどの値が新しい値であるかをどのように決定するのでしょうか? 最初の行が返されましたか?他の何か?