递归SQL查询仅返回单引用而不是递归引用

时间:2016-10-06 09:36:40

标签: sql sql-server tsql

我有一个数据库表

public String RemoveDuplicateWords(String word){
        int i=0,j=0,n;
        word = word.replaceAll(",", "");
        word = word.replace("(", " ");
        word = word.replace(")", " ");
        String array_word[];
        String final_string="";
        array_word=word.split(" ");
        n=array_word.length;


        for(i=0;i<n;i++){
            for(j=i+1;j<n;j++){
                if(array_word[i].equalsIgnoreCase(array_word[j]) && !array_word[i].equalsIgnoreCase("**")){
                    array_word[j]="**";
                }
            }
        }


        for(i=0;i<n;i++){
            if(array_word[i]!="**")
            {
                final_string=final_string+array_word[i]+" ";
            }
        }

        return final_string;
    }

id (INT, NOT NULL) username (NVARCHAR, NOT NULL) holiday_replacement (INT, NULL) 可以是holiday_replacement,也可以引用NULL字段中的值。

现在,确定指定的id holiday_replacement 的人是微不足道的,但是为了使这个查询复杂化,可以链接 holiday_replacement 。 / p>

简单来说,用户可能拥有 holiday_replacement ,他们自己拥有 holiday_replacement

在这种情况下,查询应返回此&#39; 假日替换图中所有用户的列表。

目前我有

id

但是,此查询仅返回直接引用WITH user_graph AS ( SELECT * FROM table_name WHERE holiday_replacement = @current_user_id UNION ALL SELECT tn.* FROM table_name tn JOIN user_graph ug ON ug.holiday_replacement = tn.id ) SELECT id FROM user_graph 作为 holiday_replacement 的用户,并且不会考虑任何其他也应该使用的用户由于这种链接而归还。

例如,如果我有以下3个用户:

@current_user_id

然后对于id = 1, username = 'user_1', holiday_replacement = NULL id = 2, username = 'user_2', holiday_replacement = 1 id = 3, username = 'user_3', holiday_replacement = 2 = 1,查询应该返回

@current_user_id

但目前只考虑直接引用用户并返回

id
---
 2
 3

我无法绕过我需要改变的东西。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

使用下面的代码

WITH user_graph AS (
SELECT
    *
FROM
    table_name
WHERE
    holiday_replacement = @current_user_id

UNION ALL

SELECT
    tn.*
FROM
    table_name tn
    JOIN user_graph ug ON ug.id =tn.holiday_replacement 
) 
SELECT
    id FROM
    user_graph