問題タブ [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.
sql - Oracleで連結文字列を生成する高速な方法
邪悪なコーディングが戻ってきたとき、私たちは嫌いではありませんか?
少し前に、後でさらに処理するために、いくつかのフィールドを連結する文字列を生成する必要がありました。クエリを直接実行するのは良い考えだと思い、SOのヘルプを使用して取得しました。機能した。しばらくの間...
テーブルは大きくなり、今ではそのトリック(私が知っていることは非常に非効率的です)は正確には実行可能ではありません。これは私がしていることです:
うまくいく:
お気づきかもしれませんが、ここでの邪悪なことは、where rn = cnt
を削除すると、Oracleが実際に行っているすべての作業(おそらく)が表示されることです。
私は実際にこれをあまりレコードがない多くの場所で使用しています。約50万レコードまではかなり問題ありません。
最近、私は〜15Miのレコードを持つテーブルで同じことを試しましたが、まあ...ダメです。
質問:これをOracleでより効率的に行う方法はありますか、それとも実際のコードに落とし込むときですか?これは実際の主要な問題ではないので、高速である限り、まだクラッジングを行う余裕があります...私が使用している「usrid」列のインデックスがあることは言及する価値があります。
乾杯、
sql - SQL の最適化: CONNECT BY ... START WITH
CONNECT BY
以下のようなandSTART WITH
ステートメントを使用したクエリがあります。IN 句のクエリは、実行に 5 秒もかからず、3000 行が返されます。fact_table
20M のレコードが含まれています。このクエリの実行には永遠に時間がかかるため、以下のこの SQL を最適化するにはどうすればよいですか :(
sql - teradataのレベルごとに接続を変換する方法
oracleのconnectbylevel関数をteradataに変換しようとしていました。私はネット上で多くの例を見てきましたが、この特定の例は異なります、
何かアイデアがあれば教えてください。
oracle - OracleCONNECTBY-第1レベルのアイテムのみを返す
親製品とそのすべての子製品を選択しようとしています。必要に応じて、部品表(BoM)を分解します。これは十分に単純な作業であるはずですが、期待した結果が得られません。
次の結果が表示されると思います。
..ただし、最初の行(親)のみが返されます。
注:テーブルにはpart_no / serial_noの複合キーがあり、この例からわかるように、親は通常、子の1つからserial_noを継承します。これらの問題のいずれかが問題を非常に複雑にするかどうかはわかりませんが、明らかに問題が発生しています。
クエリが階層全体をドリルダウンしないのはなぜですか?
sql - OracleCONNECTBY階層クエリの親列への参照
私は次のようなデータを持っています:
これは階層データであり、ルート複合キー(この場合09/10 10000 A1234
)に対してクエリを実行します。フィールドは、キーFLAG
によって識別される「オブジェクト」を参照しLKEYx
ます。ネストのレベルはいくつでもかまいません。(階層が保持されている限り、上記の例のように、フィールドが不変である必要はないことに注意してください。KEY1
)KEY3
取得したいのは葉のノードですが、葉の親KEY2
が2番目の文字と同じ長さであるLKEY2
かX
、2番目の文字と同じ長さである場合は、直接の親を返します。この場合、レコードをオプションとしてマークする必要もあります...つまり、次のようになります。
これを行うクエリを作成しましたが、きれいではありません。さらに、オプションのレコードを区別するために、すべてのリーフノードがツリーの同じレベルにあると想定しています。ただし、これは必ずしも正しいとは限りません。私の質問は次のとおりです。
その理由queryKeys
は、より大きなクエリの他の場所で使用され、複数のレコードを含めることができるためです。そのmaxTree
一部は、その一般的な奇抜さを超えた問題です!
さて、この投稿のタイトルの理由は、親のフィールドを参照できれば、このクエリをはるかに簡単にすることができるからです。FLAG
私はこのアイデアへのアプローチを試みましたJOIN
-関連するキーでツリーをそれ自体と結合します-しかし、私が間違っていない限り、それはあなたが正しいものを見つけるためにツリーを反復し続けなければならないという再帰的な問題を引き起こします親キー(KEYx
とLKEYx
フィールドの両方がレコードの完全な複合キーを定義するため)。
(PS違いが生じる場合は、Oracle 10gR2を使用します。)
sql - 以前のクエリによる接続でSYS_CONNECT_BY_PATHによって作成されたパスを検索
Connect Byクエリを使用して、グループの階層グループを表示しています。このページには、親グループを選択するためのコンボボックスがあります。ただし、現在編集中のグループを含むすべての行を非表示にします。
これは私のテーブルです、
私の最初の質問は;
この結果はグリッド上にありました。
例えば;
ページEditgroup.aspx?group_id=24
上これらのすべての行が表示されますが、Groupは自己子化できないため、GROUP_ID=24を含むすべての行パスを非表示にします。
このクエリで一時的な解決策を見つけました。
24はURLから来ています。
将来ビッグデータを取得した時点では、効率的な解決策にはならないだろうと思います。
パスにこのIDが含まれているかどうかをよりスマートに検出するにはどうすればよいですか?
sql - oraclesqlのCONNECTBY句とSTARTWITH句
以下のテストデータの階層データが必要です。ユーザー「jones」の場合、以下のレコードをフェッチする必要があります。CONNECTBY句とSTARTWITH句に問題があります。また、menu_itemsテーブルとrole_menu_itemsテーブルの間にいくつかのJOINの問題があると思います。
ユーザーとそれに対応する役割については、以下のデータに影響を与える必要があります
出力
oracle - Oracle Connect Byクエリの結果セットは、階層内ではなくランダムに生成されます
親と子の関係を持つテーブルのすべてのアイテムをフェッチするために、startwithとconnectbyを使用していくつかのクエリを準備しました。
今まで、これらのクエリは完全に正常に機能していました。しかし今、私は返された階層が同じではないことに気づきました。データは同じですが、階層は完全にランダムな方法で返されます。
なぜこれが起こっているのか誰かが提案できますか?
以下はサンプルクエリです。
oracle - 複数の親によるOracle接続
connect by を使用して問題に直面しています。
次の 3 つを含むいくつかの列を取得するクエリがあります。
- ID
- 親ID
- オブジェクト ID
同じID
andに対してparentID
、複数のオブジェクトが関連付けられています。
ID ParentID ObjectID
1 0 112
1 0 113
2 0 111
2 0 112
3 1 111
4 1 112
使用しようとしていますconnect by
が、適切な階層で結果を取得できません。以下に示すように必要です。ID
-parentID
コンボを取り、それを含むすべての行を表示しID-parentID
、次にこれのすべての子を表示しますID
。つまり、parentID
= ID
ID ParentID ObjectID
1 0 112
1 0 113
3 1 111
4 1 112
2 0 111
2 0 112
上記のクエリでは、必要な適切な階層が得られません。
sql - Oracle Connect by SQLで最終的な親ID列を取得する方法
1 このようにテーブルを作成します
2 このスクリプトを実行すると、出力は次のようになります
3 質問: この結果が必要な場合、コードはどのように記述すればよいですか?