相关疑难解决方法(0)

帮助递归CTE查询加入第二个表

我的目标是通过表tbl递归,并在通过该表递归时从另一个表tbl2中选择一个国家缩写(如果它存在)并将这些结果附加到最终输出中.

我将使用的例子来自这篇文章

tbl2有一个外键'tbl_id'到tbl,看起来像这样

INSERT INTO @tbl2( Id, Abbreviation, tbl_id ) 
VALUES 
 (100, 'EU', 1) 
,(101, 'AS', 2) 
,(102, 'DE', 3) 
,(103, 'CN', 5)
Run Code Online (Sandbox Code Playgroud)

*注意:并非所有国家/地区都有缩写.

诀窍是,我希望亚洲所有国家至少显示亚洲的缩写"亚洲",即使一个国家没有缩写(例如印度).如果该国家确实有缩写,则结果需要如下所示:中国:CN,AS

我使用子查询部分工作,但印度总是为缩写返回NULL.它的行为就像没有完整的递归路径回到缩写,然后它返回null.也许解决方案是在缩写表上使用左外连接?我已经尝试了几个小时的许多不同的变化,子查询尽可能接近我.

WITH  abcd 
    AS ( 
          -- anchor 
        SELECT  id, [Name], ParentID, 
                CAST(([Name]) AS VARCHAR(1000)) AS "Path" 
        FROM    @tbl 
        WHERE   ParentId IS NULL 
        UNION ALL 
          --recursive member 
        SELECT  t.id, t.[Name], t.ParentID, 
                CAST((a.path + '/' + t.Name + ':' +                 
                (
                    select t2.abbreviation + ','
                    from @tbl2
                    where t.id = t2.id
                )) AS VARCHAR(1000)) AS …
Run Code Online (Sandbox Code Playgroud)

sql sql-server-2005 subquery recursive-query

2
推荐指数
1
解决办法
4605
查看次数

标签 统计

recursive-query ×1

sql ×1

sql-server-2005 ×1

subquery ×1