問題タブ [connect-by]
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.
database - where句の動作を使用した階層クエリ「STARTWITH」
仕事中にクエリに出くわしましたが、それがどのように機能するのか正確に理解できませんでした。クエリが行うことは、今日その親である人のすべての親を探すことです。
ここでの秘訣は、各親子関係に有効な期間があることです。
このデータセットを参照してください。
祖父母は2012年1月1日から2015年2月2日まで父の親です
父は2012年1月1日から2011年2月2日まで子の親です
子供はただ最低レベルの人です
NewFatherは、2012年1月1日から2014年2月2日までの子の親です。
現在、子供に今日有効な親のリストは、NewFather
リストを取得するために、以前は次のSQLを使用していました。
personID
バインドされた変数はどこですか
where句の動作は、最初にすべてのレコードを取得してから、非結合条件をチェックする(開始日と終了日をチェックする)ため、このクエリは機能しませんでした。これにより、NewFather, GrandParent
完全に間違っている親のリストが表示されます。
したがって、クエリは次のように変更されました。
今私が理解していないのは:
start with句のwhere条件は、このような方法でクエリの動作にどのように影響しますか?
このクエリについて私が嫌うもう1つの点は、という名前の完全に無関係なテーブルを使用していることです。このテーブルには、の各人ci_acct_per
の列が含まれているだけです。per_id
ci_per_per
もっと上手くできますか?元のクエリを修正するためのよりクリーンなアプローチはありますか?
アップデート
このクエリは、階層の上位を移動する場合にのみ機能し、子を探している場合は機能しません。ただし、このクエリは子を検索することはなく、検索することも想定されていません。
oracle - Oracle-ジャンクションテーブルと以前の接続
Connect-to-priorステートメントでのみ解決できると思う問題があります。
私のデータモデルは、次のように簡略化されています。
アイテムのセットが1つのタスクに結合されます。タスクのセットは1つ以上のアイテムに結合されます(これがTASK_ITEMジャンクションテーブルの出番です)。プロセスは一連のアイテムで始まり、単一のアイテムで終わります(ITEM.NEXT_TASK_IDは最後のアイテムではnullであり、最初のアイテムではtask_itemは存在しません)。
私の問題:
1つのtask_idが与えられた場合、先行するすべてのタスクを抽出したいと思います。
これは、Philip GreenspunによるOracleのツリーの優れた紹介、またはWikibookの階層クエリの説明に記載されている問題に隣接する問題ですが、IDとジャンクションテーブルがさらに含まれている場合、これらの問題に対処する適切な解決策を見つけることができないようです。
私自身のSQL-fooは悲しいことに不足しており、特定の問題の解決策を見つけることなく、私の心をググってしまいました。
キャリーフィッシャーの声で:私がオーバーフローをスタックするのを手伝ってください、あなたは私の唯一の希望です。
oracle - Oracleで特定の階層クエリを実現する方法
次のようなテーブルがあります (Oracle 11.2.0.2.0):
ビジネス ルールでは、リーフ レベル以外の要素にデータ エントリを含めることができますが、データベースにクエリを実行して次のような出力を生成する必要がないかのようにレポートする必要があります。
したがって、基本的には、リーフ レベルへのデータ エントリを許可する中間ブランチをプッシュ ダウンする必要があります。新しいリーフは、名前が変更されたブランチにロールアップする必要があります。
助けてくれてありがとう
oracle11g - ORACLE での USING CONNECT BY 句
次の表があります。
以下のデータ:
望ましい出力は次のとおりです。
connect by と level を使用しようとしました。
出力は次のとおりです。
64 行が選択されました
そのため、何をどのように正確に使用すればよいかわかりません。毎回 role_name によってレベルが異なるためです。それで、私が欠けているものを誰か教えてもらえますか?
sql - Oracle での connect by の巨大な条件
Oracle 11g データベースに最適化の問題があります。以下のような構造のクエリを取得しました。
HUGE_CONDITION は非常に大きく (~3500 文字)、2 つの場所にあるため、クエリは非常に遅くなります。別の方法でそれを行う方法はありますか?
oracle - Oracle "connect by" - 複数の階層
Oracle 11g R1 を使用しています。コードは次のとおりです。
私が望む結果は次のとおりです。
ここで重要なのは、通常の PRIOR ID = PARENT_ID 階層の他に、PRIOR ID = LEFT_SIBLING_ID に基づく別の階層があることです。子は、PRIOR ID = LEFT_SIBLING_ID の順にソートされます。そのため、3 の後に 2 が続き、12 の後に 11 が続きます。この順序は重要です。
これを行う方法について空白を描きました。
編集:
順序付けの問題を明確に示すために、さらに行を追加します。
クエリの結果:
兄弟は適切に並べられていますが (トップ レベルを除く)、もはや親のすぐ下にはありません。
performance - 奇妙なクエリ動作 oracle 11g
次のようなクエリがあります。
このクエリは機能します。しかし、次のように選択部分から名前を削除すると:
クエリはハングしますが、Oracle 10 g で動作していましたが、Oracle 11g にアップグレードしたときに問題が発生しました。誰でも理由を説明できますか?