【发布时间】:2026-01-29 01:50:01
【问题描述】:
我正在尝试根据匹配的 user_id 将以下 ID 连接到一行中。
当前代码
SELECT
A.USER_ID,
B.POINT_ID
FROM DATABASE1 AS A
LEFT JOIN DATABASE2 as b on a.SSCL_ID = b.SEC_ID
WHERE
RECORD_STATUS in ('2','5')
and USER_STATUS = '1'
我尝试了以下代码:
SELECT c.USER_ID,
STUFF((SELECT DISTINCT ',' + cast(POINT_ID as varchar(10))
FROM DATABASE1 A
LEFT JOIN DATABASE2 as b on a.SSCL_ID = b.SEC_ID
FOR XML PATH ('')), 1, 1, '')
from DATABASE1 c
WHERE
RECORD_STATUS in ('2','5')
and USER_STATUS = '1'
group by c.USER_ID
【问题讨论】:
-
您在子查询中缺少
WHERE的隐式 JOIN -
不确定我是否理解您的评论。我在 a.SSCL_ID = b.SEC_ID 上有 LEFT JOIN DATABASE2 作为 b。有什么需要补充的吗?
-
那么
c与a和b有什么关系呢?这是您查询中的交叉连接。c与子查询中的每一行 行相关(由来自a和b的数据组成)。 -
在提出问题时,您需要提供一个可重现的最小示例。请参考以下链接:*.com/help/minimal-reproducible-example 请提供以下内容: (1) DDL 和样本数据填充,即 CREATE table(s) 加上 INSERT T-SQL 语句。 (2) 你需要做什么,即逻辑和你的代码尝试在 T-SQL 中实现它。 (3) 期望的输出,基于上面#1 中的样本数据。 (4) 你的 SQL Server 版本 (SELECT @@version;)
标签: sql sql-server ssms