使用STUFF函数仅带那些与表中的列匹配的值

问题描述

我正在使用填充函数

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,那么您将得到一个错误,只需修复代码即可。
  • 使用表别名,以便查询更易于编写和阅读。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...