問題タブ [cross-apply]
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.
sql - INNERJOINでCROSSAPPLYを使用する必要があるのはいつですか?
CROSS APPLYを使用する主な目的は何ですか?
cross apply
パーティションを作成している場合に大きなデータセットを選択するときに、より効率的になる可能性があることを(漠然と、インターネット上の投稿を通じて)読んだことがあります。(ページングが頭に浮かぶ)
CROSS APPLY
また、右のテーブルとしてUDFを必要としないことも知っています。
ほとんどのINNER JOIN
クエリ(1対多の関係)では、使用するように書き直すことができますCROSS APPLY
が、常に同等の実行プランが得られます。
誰かが私に、CROSS APPLY
それがうまくいく場合にいつ違いを生むかについての良い例を教えてもらえINNER JOIN
ますか?
編集:
これは簡単な例で、実行プランはまったく同じです。(それらが異なり、どこcross apply
がより速く/より効率的であるかを見せてください)
sql - クレイジーな SQL の質問: ピボットを使用してある種のクロス適用を行うにはどうすればよいですか?
顧客は、フィールドに大量のレコードがあるデータにショートカットを持っています。それらを解析するとき、「識別子」を 7 日ずつ増やして、数量ごとに 1 つのレコードを作成する必要があります (数字は日付を表しているためです。
例: 4 週間販売されている単一の製品で、4 つのレコードが必要です。毎週 1 つの製品。
[Event Number]
[Classification]
[Weeks Running]
[Some Data]
2009 11 29 00
1
1
runs one week
2009 12 06 00
2
1
runs one week
2009 12 13 00
1
4
runs four weeks
2009 12 20 00
2
4
runs four weeks
どういうわけか、このデータをビュー(sql select)で次のように変換する必要があります(すべて同じテーブル内にあり、パーツを表示するために空白が含まれています:
[Event Number + Classification]
[Some Data]
2009 11 29 01
runs for one week 1週間で1レコード。
2009 12 06 02
runs for one week
2009 12 13 01
runs for four weeks日付を 7 ずつ
2009 12 20 01
runs for four weeks
2009 12 27 01
runs for four weeks
2009 01 03 01
runs for four weeks
2009 12 20 02
runs for four weeks増やして 4 回繰り返す 日付を 7 ずつ増やして 4 回繰り返す
2009 12 27 02
runs for four weeks
2009 01 03 02
runs for four weeks
2009 01 10 02
runs for four weeks
私の考えは、ある種のピボットクロス適用SQLコードを持っていることですか?
.net - LINQtoSQLクロスアプライ
LINQのユーザー定義テーブル値関数にクロスアプライするクエリを作成したいと思います。SQLは、以下のように非常に単純です。
この投稿では、クロスアプライと外部アプライの両方を含むが、tvfではなくサブクエリのみを含むSQLが生成されるLINQクエリの例を示します。 この記事では、LINQ to SQLが「関係ナビゲーション」の相互適用演算子と外部適用演算子を生成することを確認していますが、このコンテキストでそれが何を意味するのかはわかりません。 これ投稿では、私がやりたいことのほとんどを説明しています。答えは、これを行う唯一の方法は、SQLクエリをストアドプロシージャでラップしてから、LINQを介してspを呼び出すことです。アプリケーション全体で複数のLINQクエリでこのように使用できるtvfが実際に必要なので、これが当てはまらないことを願っています。そのため、「spでラップする」は機能しません。LINQを介して上記の単純なSQLステートメントのようなものを取得する方法を知っている人はいますか?
sql-server-2005 - フリーテキストをクロスアプライ
MS SQL Server 2005:table1にはフルテキストインデックスがあります。1回のクエリで複数のフリーテキストテーブル検索を実行したいのですが、2回の試行が失敗しました。助けていただければ幸いです、ありがとう!これが修正されれば、psはsql2008にアップグレードする用意があります:)
sql-server - CROSS APPLY to INNER JOINを書き直して、ビューのインデックスを作成する方法
別のスレッドで、ストアドプロシージャをビューに変換する方法の実例を取得しました。これは、顧客名を注文マッピングに保持します。注文は、注文がない場合のNULLを含む、注文のコンマ区切りリストです。したがって、以下の表の場合、ビューに表示するには次のものが必要です。
ビューにインデックスを付ける必要がありますが、ビュー内のSELECTクエリにAPPLYやサブクエリがある場合はインデックスを付けることができません。このビューをインデックス付きビューに変換することは可能ですか?
sql-server - SQL Server の XML 列内のデータにアクセスするための推奨される方法
バックグラウンド
最近、私は SQL Server 2005 の列として XML をより多く使用するようになりました。いくつかの結合をサポートする構造コードをさらに記述します。
SCOPE_IDENTITY()
これら 2 つのリンク テーブルのデータを実際に生成するために、2 つの XML フィールドをストアド プロシージャに渡します。ストアド プロシージャは、メイン レコードを書き込み、2 つの XML 変数を @tables に分解し、マスターからの新しい変数とともに実際のテーブルに挿入します。記録。
しばらくして、これらのテーブルを完全に廃止し、XML を XML フィールドに格納することにしました。ここで、一般的なクエリのパフォーマンスGROUP BY
が XML データでは機能しないなど、いくつかの落とし穴があることを理解しました。クエリは一般的に少しごちゃごちゃしていますが、全体的にはXElement
、データが戻ってきたときに作業できるようになったことが気に入っています。
また、この内容は変更されません。ワンショットなので改造の心配はありません。
このデータを実際に取得するための最良の方法について疑問に思っています。私のクエリの多くは、子レコードまたはサブ子レコードの条件に基づいてマスター レコードを取得することを伴います。データベース内のほとんどの sproc はこれを行いますが、はるかに精巧な規模であり、通常は UDF とサブクエリが効果的に機能する必要がありますが、いくつかのデータのクエリをテストするために簡単な例を作成しました...
今、私はそれをつかむ2つの方法を見ることができます.
方法 1
本当に?sql:variable は少し不健全に感じます。ただし、機能します。ただし、より意味のある方法でデータにアクセスすることは明らかに困難です。
方法 2
これはもっと似ています。すでに簡単に拡張して、結合やその他すべての優れた機能を実行できます。CROSS APPLY
以前にテーブル値関数で使用したことがありますが、非常に優れていました。前のクエリとは対照的に、この実行計画は非常に高度です。確かに、私はこれらのテーブルに対してインデックス作成などを行っていませんが、バッチ コスト全体の 97% を占めています。
方法 2 (拡張)
ここにいいIN
節があります。次のようなこともできますpt.PhoneType = 'Work'
ついに
したがって、基本的には必要な結果を取得していますが、このメカニズムを使用して少量の XML データを調査する場合に注意すべきことはありますか? 精巧な検索中にパフォーマンスが低下しますか? また、そのようなマークアップ スタイル データの保存はオーバーヘッドが大きすぎますか?
サイドノート
私は過去にリストをsprocに渡すためだけにsp_xml_preparedocument
やOPENXML
のようなものを使用しましたが、これは比較して新鮮な空気のようなものです!
sql - SQL複合ユニオン
これを説明するのは少し難しいですが、うまくいけば解決策があります。
IDを取得してテーブルを返すUDFがあります。SELECT
これらのIDに対してUNION
、UDFの結果を実行する方法はありますか?例えば;
IDを取得するには;
SELECT [ID] FROM [TableOfIDs]
IDからオブジェクトのプロパティを取得するには;
SELECT * FROM GetObjectProperties(@ID)
しかし、どうすれば2つを組み合わせることができますか?つまり、IDのクエリからUDFの結果を結合するにはどうすればよいですか?
それが理にかなっていることを願っています!
xml - XMLフィールドのノード数を取得するXQuerySQLServer 2008
XMLフィールドのノード数を取得しようとしています。しかし、結果として常に0が表示されます。これが私のクエリがどのように見えるかです。
私のXMLは次のようになります:
sql-server-2008 - SQLサーバーでクロス適用
最近、ストアド プロシージャに問題があり、動作が遅すぎたため、同僚の 1 人がクロス適用を提案しました。クロス適用は内部結合として機能するが、テーブル間のコマンド キーは必要ないと言いました。
私のシナリオは、私は3つのテーブルを持ってcrossarticle_article
おりcrossarticle_articletocategory
、今は4であるcrossarticle_article
すべてのレコードを取得したいと思っています。categoryid
categoryid
crossarticle_articletocategory
私が理解している限り、以下のクエリを作成しました:
このクエリはcrossarticle_article
、カテゴリ ID が 1 に一致するレコードのみを返す必要がありますが、3 つのテーブルすべてからすべてのレコードを返します。
私が間違っているところ、これがクロス適用の使用方法でない場合、使用方法、およびその利点は何ですか。
クロス適用が同じテーブルで機能するということですか...もしそうなら、シナリオはどうなるでしょうか...
sql - クエリを最適化する方法
Linq2SqlをORMとして使用していて、次の問題が発生しています。2つのテーブルがあり、それらをclient(id、name)およびclient_action(id、clientid、date)と呼びます。'client'テーブルにはクライアントが含まれ、client_actionにはユーザーのアクションのログが含まれ、最初に必要なものがあります。
linq2sqlクエリ(ページングと並べ替えを使用)があり、その結果、次のSQLが生成されました。
そのクエリに論理エラーがあり、私はそれを変更しました。これで、生成されたSQLは次のようになります。
そして、パフォーマンスの問題が発生します。'SET STATISTICS IO ON'を使用して両方のクエリを実行したところ、興味深い結果が得られました。
- 最初のクエリの場合:
- クライアントテーブルはフィルタリングされます
- 「トップ10」が適用されました
- 結果の10レコードに「クロスアプライ」が適用されます
- 2番目のクエリの場合:
- クライアントテーブルがフィルタリングされます(約10,000レコードが見つかりました)
- その10Kレコードに適用される「クロスアプライ」
- 「トップ10」が適用されました
そのため、2番目のクエリの動作が大幅に遅くなります。可能な場合はいつでもフィルタリング後に「クロスアプライ」が適用されるようにクエリを「微調整」する方法はありますか?
問題は、2つのクロスアプライがあり、そこにさらに2つの結合があり、すべてが非常に遅くなることです。クエリの速度を向上させることができるインデックスを作成しましたが、それでも煩わしいほど遅いです。
ヘルプヘルプ ヘルプ。