问题描述
我正在使用填充函数:
STUFF((SELECT disTINCT ',' + CAST(id as varchar)
FROM users
WHERE userID = depatments.userID
FOR XML PATH('')),1,'') AS Users
每个用户都有一个部门,我想返回与该部门匹配的users表的那些值,但相反,它返回此列中所有行的所有值。我该如何解决?
解决方法
首先,我的猜测是用户拥有id
,但没有userid
。所以:
STUFF((SELECT DISTINCT ',' + CAST(id as varchar(255))
FROM users u
WHERE u.id = departments.userID
FOR XML PATH('')
),1,''
) AS Users
注意:
- 从不不加长度使用
varchar
(或相关类型)。 SQL Server的默认长度因上下文而异,可能不够大。 - 始终限定查询中的所有列引用,因此很清楚它们来自何处。如果您在查询中使用
u.userid - departments.userId
,那么您将得到一个错误,只需修复代码即可。 - 使用表别名,以便查询更易于编写和阅读。