問題タブ [hierarchical-query]
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 - 再帰的サブクエリファクタリングによる循環検出
Oracle SQLは、独自のCONNECT BY構文を使用して、v2以降の階層クエリを実行できます。最新の11gリリース2では、再帰的サブクエリファクタリング(再帰的with句とも呼ばれます)が追加されました。これはANSI規格であり、私が正しく理解していれば、これは他のRDBMSベンダーによっても実装されています。
connect-byとrecursivewithを比較すると、循環検出を使用した場合の結果セットに違いがあることに気付きました。結果による接続は私にとってより直感的であるため、Oracleの実装にバグが含まれているのか、それともこれが標準のANSIであり、予想される動作であるのか疑問に思います。したがって、私の質問は、MySQL、DB2、SQLServerなどの他のデータベースを使用してクエリで再帰をチェックできるかどうかです。もちろん、これらのデータベースが再帰的なwith句をサポートしている場合。
Oracle11.2.0.1.0での動作は次のとおりです。
CONNECT BY構文を使用したクエリ:
これは私には直感的に見えます。ただし、新しいANSI構文を使用すると、もう1行が返されます。
これは、チェックに使用できるスクリプトです。
sql - 階層クエリで要素の個別のリストを取得するにはどうすればよいですか?
名前、仕事、都市で識別される人々を含むデータベーステーブルがあります。すべての都市の会社のすべての仕事の階層表現を含む 2 番目のテーブルがあります。
people テーブルに 3 人いるとします。
また、ジョブ テーブルには何千ものジョブ タイプと場所の組み合わせがあり、そのサンプルを次に示します。parent_title はタイトルへの外部キーであるため、階層関係を確認できます。
.....
start with
私が抱えている問題は、私の Person テーブルが複合キーであるため、指定した都市の 3 つの仕事のそれぞれから始まるようにクエリの一部を構造化する方法がわからないことです。
必要なものを取得するために 3 つの個別のクエリを実行できますが、これではうまくスケーリングできません。例えば:
指定した 3 人を超えるすべてのジョブの個別のリストを取得するには (または、不可能な場合は個別にラップすることもできます)、他にどのようにすればよいでしょうか?
sql - Oracle階層クエリの実行手順
ドキュメントは次のとおりです:http://download-east.oracle.com/docs/cd/B12037_01/server.101/b10759/queries003.htm
説明する実行順序は次のとおりです。
- 結合が存在する場合は、結合がFROM句で指定されているか、WHERE句の述語で指定されているかに関係なく、最初に評価されます。
- CONNECTBY条件が評価されます。
- 残りのWHERE句の述語が評価されます。
私の質問は、パート1は、ネストされたクエリに適用されますか。たとえば、私が持っている場合:
where句の結合はすぐに実行されますか、それともこのコンテキストのfoo.foo_idは事実上単一の値であるため、残りの単一値の条件付き制限が実行されるパート3で実行されますか?
sql - 以前の Oracle 10g Connect - パフォーマンスの問題
次の SQL ステートメントがあります。
これは、約 160 万匹の動物を含むテーブルにあります。各レコードには、Animal_Id、Sire_Animal_Id、および Dam_Animal_Id (Sire = 父、Dam = 母) があります。
この sql を使用して、完全な動物の血統を表示します。結果には、動物、2 つの親、4 つの祖父母などが表示されます。
私の問題は、このステートメントが 1 匹の動物に対して 15 秒かかることです。これを最適化する方法が必要です。何かご意見は?
sql - ツリー内の2つのノード間のすべてのノードをクエリするにはどうすればよいですか?
階層型データベース構造(列ID
などPARENT_ID
)があり、行ごとに定義されており、最上位の行には。がありNULL PARENT_ID
ます。
このテーブルのすべての関係を別のテーブルにフラット化します。たとえば、祖父母、親、孫の1つの階層に3つのレコードがある場合、3つのレコードがあります。
(grandparent, grandchild)
階層クエリを実行して孫が祖父母の子孫であると判断するのではなく、このフラット化されたテーブルにレコードが存在するかどうかを簡単に確認できます。
私の質問は、このフラット化されたテーブルを使用して、2つのノード間にあるすべてのレコードを最も効率的に返すにはどうすればよいかということです。例を使用して、パラメーターとして、grandparent
およびをパラメーターとして使用して、レコードgrandchild
を取得するにはどうすればよいですか。(grandparent, parent)
これを解決するために階層クエリを使用したくありません...結合なしでこれを実行できるかどうか疑問に思っています。
sql - 階層構造でDBMSを検索する
既存のRDBMSの上にオープンソースの階層型データベースまたはエミュレーションはありますか?
階層データを格納でき、階層データ(たとえば、「SELECT LEVEL ... CONNECT BY ...」、「SELECT PARENT ...」など)に対してクエリを実行できるDMBS(または既存のRDBMSへのプラグイン)を検索しています。 )。Oracleにサポートがあることは知っていますが、もっと複雑なソリューションはありますか?
sql - MySQL でのパス列挙モデル PathString の分割
Joe Celko の本(38 ページ) に従って、Path Enumeration モデルを実装しようとしています。私のテーブル (および連続する整数のみを含むサポート テーブル) の関連する属性は次のようになります。
_IntegerSeries には 1 から n までの整数が含まれており、n は必要以上に大きくなっています。寄稿には次の 3 つのレコードが含まれます。
... そして、Joe のクエリの修正版を使用します。
... 階層内の ContributionID 3 のすべての上司を含む結果セットを正常に返します。さて、この例では、PathString 列にはプレーンな整数値が保持されており、ContributionID 10 に達すると明らかに問題が発生します。そのため、PathString 列を変更してセパレーターを含めます。
さて...この本は、PathStringが区切り文字を使用するときに上位を取得する例を示していません...したがって、後でそれを理解する必要があります。しかし、それは PathString を分割する方法の例を示しています (これは、優れた検索を行うのに役立つと思います)。これを行うサンプル コードの MySQL バージョンは次のとおりです。
...しかし、このコードは空の結果セットを返します。私は何か間違ったことをしていますが、何がわかりません。Joe にメールで迷惑をかける前に、これを stackoverflow コミュニティに公開することにしました。誰にも考えはありますか?
アップデート
Quassnoi のクエリ... テスト後に少し変更されましたが、機能的には元のクエリとまったく同じです。非常に素晴らしい。今まで使っていたものよりきれいになりました。本当にありがとう。
sql-server - SQL Server ストアド プロシージャから階層データ構造を取得できますか?
メソッドの1つがアイテムのリストを返し、それぞれが別のアイテムのリストを持っているWebサービスがあります。
これらのリストは、単純なクエリを使用して SQL Server データベースから取得されます ( と の両方がデータベース内の関連テーブルに対応します) TopLevelItem
。LowLevelItem
これまで、このすべてのデータを取得するには、2 つのクエリが必要でした。もう 1 つは、トップ レベルのアイテムごとに 1 回実行される、低レベルのアイテムを取得するためのものです。
ただし、これは非常に効率が悪いようです。必要なすべてのクエリを実行し、結果を階層データ構造として取得する単一のストアド プロシージャを定義したいと考えています。出来ますか?もしそうなら、どのように?
oracle - 子が検索文字列に一致するレコードの完全なツリーのみを返す Oracle 階層クエリが必要
以下は、検索文字列に一致するノードがないツリーの剪定を行わない、このクエリの完全なデータ セットの例です。
ユーザーが「foo」を検索した場合、次を返す必要があります。
実際のケースはもう少し複雑です (つまり、ツリー内の 3 つのレベルを返したい) が、これで問題を捉えることができます。英語では、テキスト列の一致するノードから始まる検索文字列に一致するノードの祖先ツリーを返し、すべての祖先を返します。
私はOracleを初めて使用し(少なくとも最近)、成功せずにCONNECT BY句に追加しようとしました-常に次を返します:
PS - これに関するオラクルのドキュメントと例は、 CONNECT_BY_ROOT が祖先をキャプチャすることを暗示していますが、トップレベル (ROOT) の値を返すだけのようです。
sql - 2 番目に高い給与を見つける
まあ、それはよく知られている質問です。以下を検討してください
2番目に高い給与を見つける必要があります
どういうわけか機能していません...正しい結果が得られません。誰でも私を助けてください。