一个表关联另一个表的多个id在不用循环的情况下怎么都查出来?
分类:SQL
多个id用逗号分割的
1个回复
-
xsmile
chatGPT给的结果如下:
可以使用 SQL Server 中内置的 STRING_SPLIT 函数将合并在一起的逗号分隔值分割成多个行,再通过 INNER JOIN 或 LEFT JOIN 等方式将两张表关联起来。
假设 a 表中的 id 列与 b 表中的 id 列的值对应,但是 b 表中的 id 列的值已经合并为逗号分隔的字符串。
以下是一个具体的示例 SQL:
-- 创建表 a 和表 b,并插入测试数据 CREATE TABLE a (id INT PRIMARY KEY, name NVARCHAR(50)) INSERT INTO a VALUES (1, 'Alice'), (2, 'Bob'), (3, 'Charlie') CREATE TABLE b (id_list NVARCHAR(MAX), name NVARCHAR(50)) INSERT INTO b VALUES ('1,2', 'Group 1'), ('2,3', 'Group 2'), ('1,3', 'Group 3') -- 将 b 表中的逗号分隔值转换为多行记录 SELECT b.name, LTRIM(RTRIM(ss.value)) AS id INTO b_split FROM b CROSS APPLY STRING_SPLIT(b.id_list, ',') ss -- 查询关联之后的结果 SELECT a.id, a.name, b_split.name AS group_name FROM a INNER JOIN b_split ON a.id = b_split.id
在上面的代码中,我们首先创建了表 a 和表 b,并向其中插入了测试数据。然后,使用 SQL Server 内置的 STRING_SPLIT 函数将 b 表中的逗号分隔值转换为多行记录,这样每条记录都包含了一个 a 表中的 id 值和一个 b 表中的名称。最后,使用 INNER JOIN 将结果中的记录按照 id 值关联为一张表,并查询出 a 表中的 id、a 表中的 name 以及原始的 b 表中的名称。
需要注意的是,上述示例代码中使用了 CROSS APPLY 进行表的 JOIN 操作,因此它只适用于 SQL Server 2016 及其以上版本。如果使用的是更老的版本的 SQL Server,可以考虑使用 CROSS JOIN 或者子查询等其他的 JOIN 方法。
1年前 我来评论