Sql 使用STUFF函数仅获取与表中的列匹配的值
我使用stuff函数作为:Sql 使用STUFF函数仅获取与表中的列匹配的值,sql,sql-server,Sql,Sql Server,我使用stuff函数作为: STUFF((SELECT DISTINCT ', ' + CAST(id as varchar) FROM users WHERE userID = depatments.userID FOR XML PATH('')), 1, 1, '') AS Users 每个用户都有一个部门,我想返回与该部门匹配的users表的值,但它返回的是该列中所有行的所有值。如何修复它?首先,我猜用户有id,但没有userid。因此: S
STUFF((SELECT DISTINCT ', ' + CAST(id as varchar)
FROM users
WHERE userID = depatments.userID
FOR XML PATH('')), 1, 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, 1, ''
) AS Users
注:
- 切勿使用没有长度的
(或相关类型)。SQL Server的默认长度因上下文而异,可能不够大varchar
- 始终限定查询中的所有列引用,以便清楚它们来自何处。如果在查询中使用
,则会出现错误并修复代码u.userid-departments.userid
- 使用表别名,以便更易于编写和读取查询
varchar
变量和参数提供长度您使用的是哪个SQL Server版本?STUFF
唯一要做的就是删除前面的,
。字符串聚合由XML PATH()
执行。SQL Server 2017引入了STRING\u AGG
,因此不再需要XML路径这是我获取该用户行中所有值的地方,它不会带来匹配的结果,但所有行都填充了大量ID,所有行的al都相同