sql >> データベース >  >> RDS >> Oracle

OracleSQLと共通の機能を共有する個人にフラグを立てる

    これを行う1つの方法は、階層(「接続」)クエリを使用することです。最初のステップは、基本データから初期関係を抽出することです。階層クエリは、この最初のステップの結果に基づいて構築されます。それ自体が連結成分であるノードを示すために、入力にもう1つの行を追加しました。

    接続されたコンポーネントをAおよびBとしてマークしました。もちろん、たとえば30,000個の接続されたコンポーネントがある場合は機能しません。私のソリューションでは、接続された各コンポーネントのマーカーとして最小ノード名を使用します。

    with
      sample_data (id, feature) as (
        select 1,  1 from dual union all
        select 1,  2 from dual union all
        select 1,  3 from dual union all
        select 2,  3 from dual union all
        select 2,  4 from dual union all
        select 2,  6 from dual union all
        select 3,  5 from dual union all
        select 3, 10 from dual union all
        select 3, 12 from dual union all
        select 4, 12 from dual union all
        select 4, 18 from dual union all
        select 5, 10 from dual union all
        select 5, 30 from dual union all
        select 6, 40 from dual
      )
    -- select * from sample_data; /*
    , initial_rel(id_base, id_linked) as (
        select distinct s1.id, s2.id
          from sample_data s1 join sample_data s2
                              on s1.feature = s2.feature and s1.id <= s2.id
      )
    -- select * from initial_rel; /*
    select     id_linked as id, min(connect_by_root(id_base)) as id_group
    from       initial_rel
    start with id_base <= id_linked
    connect by nocycle prior id_linked = id_base and id_base < id_linked
    group by   id_linked
    order by   id_group, id
    ;
    

    出力:

         ID   ID_GROUP
    ------- ----------
          1          1
          2          1
          3          3
          4          3
          5          3
          6          6
    

    次に、ID_GROUPをFLAGとしてベースデータに追加する必要がある場合は、簡単な結合で追加できます。




    1. SQLServerのメンテナンスプランを使用してバックアップとメンテナンスのジョブを自動化する

    2. SQLクエリで(func())。*構文を使用して複数の関数評価を回避するにはどうすればよいですか?

    3. パッケージオラクル内のすべての手順のリストを取得する方法

    4. Oracleでテーブルv$parameterが見つかりません