我有一个数据库表
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
我无法绕过我需要改变的东西。有人可以帮忙吗?
答案 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