| ID | 编码 |
|---|---|
| 1 | 93&94 |
| 2 | 93 |
| 3 | 93&94&95 |
| 编码 | 内容 |
|---|---|
| 93 | 其他包装 |
| 94 | 纸箱 |
| 95 | 泡沫 |
有以上两个表,其中表1的编码如果有多个是以&来区分两个编码,表1和表2可以通过编码相关联。请问如何通过SQL得到以下的结果集(SQL server数据库):
| ID | 编码 | 内容 |
|---|---|---|
| 1 | 93&94 | 其他包装/纸箱 |
| 2 | 93 | 纸箱 |
| 3 | 93&94&95 | 其他包装/纸箱/泡沫 |
| ID | 编码 |
|---|---|
| 1 | 93&94 |
| 2 | 93 |
| 3 | 93&94&95 |
| 编码 | 内容 |
|---|---|
| 93 | 其他包装 |
| 94 | 纸箱 |
| 95 | 泡沫 |
有以上两个表,其中表1的编码如果有多个是以&来区分两个编码,表1和表2可以通过编码相关联。请问如何通过SQL得到以下的结果集(SQL server数据库):
| ID | 编码 | 内容 |
|---|---|---|
| 1 | 93&94 | 其他包装/纸箱 |
| 2 | 93 | 纸箱 |
| 3 | 93&94&95 | 其他包装/纸箱/泡沫 |
随、风 上午好☀️☀️☀️️
本答案参考ChatGPT-3.5
要通过SQL得到以上的结果集,可以使用字符串函数和联接操作来实现。
解决方案如下:
首先,需要将表1中的编码字段进行切分,将多个编码分割成单独的编码,并与对应的内容进行关联。可以使用字符串函数SUBSTRING_INDEX将编码字段按照&符号进行切分。
使用子查询或临时表的方式,将切分后的编码和对应的内容进行关联,生成一个关联的临时表。
然后,将表1和关联的临时表进行联接,根据ID进行匹配,将关联的内容添加到表1的结果集中。
最后,将结果集按照需要的格式进行整理,将多个编码和对应的内容合并成一个字段。
下面是一个示例的SQL语句,可以实现上述的解决方案:
SELECT t1.ID, t1.编码, GROUP_CONCAT(t2.内容 ORDER BY t2.编码 SEPARATOR '/') AS 内容
FROM 表1 AS t1
LEFT JOIN (
SELECT
ID,
SUBSTRING_INDEX(t.编码, '&', 1) AS 编码,
t2.内容
FROM 表1 AS t
INNER JOIN 表2 AS t2 ON FIND_IN_SET(t.编码, t2.编码) > 0
UNION ALL
SELECT
ID,
SUBSTRING_INDEX(t.编码, '&', -1) AS 编码,
t2.内容
FROM 表1 AS t
INNER JOIN 表2 AS t2 ON FIND_IN_SET(t.编码, t2.编码) > 0
) AS t2 ON t1.ID = t2.ID
GROUP BY t1.ID, t1.编码;
需要注意的是,上述的示例SQL语句仅适用于MySQL数据库。不同的数据库系统可能会有一些差异,语法上可能会有些许不同。你需要根据你所使用的数据库类型进行相应的调整。
希望对你有帮助!