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

列の値の接続性を見つける

    再帰的なCTEが必要だと確信しています。ただし、サンプル結果は意味がありません。

    以下は基本的にあなたが望むことをします:

    with cte AS (
          select nod1, nod2, nod_length as Total_length,
                 convert(varchar(max), concat('-', nod1, '-', nod2, '-')) as nodes, 1 as lev
          from tbl_nodes n
          where nod1 = 'A'
          union all
          select cte.nod1, n.nod2, cte.Total_length + n.nod_length,
                 convert(varchar(max), concat(cte.nodes, n.nod2, '-')) as nodes, lev + 1
          from cte join
               tbl_nodes n
               on cte.nod2 = n.nod1
          where nodes not like concat('%-', n.nod2, '-%') 
         )
    select nodes, total_length
    from cte
    where not exists (select 1
                      from cte cte2
                      where cte2.nodes like concat(cte.nodes, '_%')
                     );
    

    こちら db<>フィドルです。




    1. PHP MySQLの小さなクエリタイムアウト、制限を10に設定する必要があります

    2. PreparedStatementを使用する場合のcom.mysql.jdbc.exceptions.MySQLSyntaxErrorException

    3. SQLは2つのテーブルを1つのテーブルに結合します

    4. PDOException:SQLSTATE [HY000] [2002] php_network_getaddresses:getaddrinfoが失敗しました:名前またはサービスが不明です