随、风 2024-03-06 09:01 采纳率: 28.6%
浏览 11
已结题

SQL server数据库,字段数据切分和关联问题

ID编码
193&94
293
393&94&95
编码内容
93其他包装
94纸箱
95泡沫

有以上两个表,其中表1的编码如果有多个是以&来区分两个编码,表1和表2可以通过编码相关联。请问如何通过SQL得到以下的结果集(SQL server数据库):

ID编码内容
193&94其他包装/纸箱
293纸箱
393&94&95其他包装/纸箱/泡沫
  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2024-03-06 09:01
    关注

    随、风 上午好☀️☀️☀️️
    本答案参考ChatGPT-3.5

    要通过SQL得到以上的结果集,可以使用字符串函数和联接操作来实现。

    解决方案如下:

    1. 首先,需要将表1中的编码字段进行切分,将多个编码分割成单独的编码,并与对应的内容进行关联。可以使用字符串函数SUBSTRING_INDEX将编码字段按照&符号进行切分。

    2. 使用子查询或临时表的方式,将切分后的编码和对应的内容进行关联,生成一个关联的临时表。

    3. 然后,将表1和关联的临时表进行联接,根据ID进行匹配,将关联的内容添加到表1的结果集中。

    4. 最后,将结果集按照需要的格式进行整理,将多个编码和对应的内容合并成一个字段。

    下面是一个示例的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数据库。不同的数据库系统可能会有一些差异,语法上可能会有些许不同。你需要根据你所使用的数据库类型进行相应的调整。

    希望对你有帮助!

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月6日
  • 修改了问题 3月6日
  • 修改了问题 3月6日
  • 修改了问题 3月6日
  • 展开全部