当前位置: 首页 > 面试题库 >

使用子记录数据(同一表)更新父记录的字段

壤驷涛
2023-03-14
问题内容

我有一个表格,其中有一个父/子关系,其中每个孩子的ExternalCategoryCode列数据都需要连接到父母中ExternalCategoryCode

这是一些示例数据,该数据已损坏,因此父记录(Id = 96) ExternalCategoryCodeNULL
。关系是通过ParentId字段进行的:

Id |Name                          |ExternalCategoryCode|ParentId
---|------------------------------|--------------------|--------- 
96 | Health & Personal Development| NULL               | NULL
---|------------------------------|--------------------|---------
97 | Health                       | H1*;H2*            | 96
---|------------------------------|--------------------|---------
98 | Personal Development         | P1;P2;P3*          | 96
---|------------------------------|--------------------|---------
99 | Other Health                 | OH*                | 96
---|------------------------------|--------------------|---------

数据应如下所示:

Id |Name                          |ExternalCategoryCode  |ParentId
---|------------------------------|----------------------|--------- 
96 | Health & Personal Development| H1*;H2*;P1;P2;P3*;OH*| NULL
---|------------------------------|----------------------|---------
97 | Health                       | H1*;H2*              | 96
---|------------------------------|----------------------|---------
98 | Personal Development         | P1;P2;P3*            | 96
---|------------------------------|----------------------|---------
99 | Other Health                 | OH*                  | 96
---|------------------------------|----------------------|---------

编辑:

  1. 后代级别可以是任何深层次,但深子级后代需要更新为主要的父级 ExternalCategoryCode。拿下面的最后两个记录( Id = 100Id = 101 )都链接到ParentId97。因为 Id = 97 ParentId IS NOT NULL ,所以我们应该继续树直到找到具有ParentIdNULL的记录(最高父级)。
  2. 另一个问题是关于最高父母的ExternalCategoryCode副本是否可以重复?下面的示例两次显示M2 *。很好,因为我们的业务逻辑类库会在发现重复项时过滤掉重复项。
  3. 如果一条记录中有一个链接ParentId(即是一个子项), 但是 具有NULL ExternalCategoryCode,则可以忽略这些代码。
    Id |Name                          |ExternalCategoryCode  |ParentId
    

    —|------------------------------|----------------------|---------
    96 | Health & Personal Development| H1;H2;P1;P2;P3;OH| NULL
    | | |
    | | M1;M2; M2;M3 |
    —|------------------------------|----------------------|---------
    97 | Health | H1
    ;H2 | 96
    —|------------------------------|----------------------|---------
    98 | Personal Development | P1;P2;P3
    | 96
    —|------------------------------|----------------------|---------
    99 | Other Health | OH | 96
    —|------------------------------|----------------------|---------
    100| Medicine | M1;M2
    | 97
    —|------------------------------|----------------------|---------
    101| Other Medicine | M2;M3 | 97
    —|------------------------------|----------------------|---------
    102| Other Medicine 2 | NULL | 97
    —|------------------------------|----------------------|---------

表格中还有其他“父/子”损坏。我如何能:

  1. 使用脚本将此html" target="_blank">脚本放到有问题的表中,并将父记录ExternalCategoryCode与子ExternalCategoryCode数据合并起来 ?

  2. 列出更新的父记录。通常在使用时UPDATED,这仅显示如下内容,据此我要报告一下:

(影响1行)

我使用的技术:

  • SQL服务器

问题答案:

SQL DEMO 首先将来自同一父级的所有代码连接起来,然后进行更新。

WITH superParent as (
    SELECT [Id], [Id] as [topParent], [Name], [ExternalCategoryCode], [ParentId]
    FROM Table1 t
    WHERE [ParentId] is NULL
    UNION ALL
    SELECT t.[Id], sp.[topParent], t.[Name], t.[ExternalCategoryCode], t.[ParentId]    
    FROM Table1 t
    JOIN superParent sp
      ON sp.[id] = t.[ParentId]
),  
combine as (
    Select distinct ST2.[topParent], 
        (
            Select ST1.[ExternalCategoryCode] + ';' AS [text()]
            From superParent ST1
            Where ST1.[topParent] = ST2.[topParent]
            ORDER BY ST1.[Id]
            For XML PATH ('')
        ) [External]
    From superParent ST2
    WHERE ST2.[ParentId] IS NOT NULL    
)    
UPDATE T
SET T.[ExternalCategoryCode] = C.[External]
FROM Table1 T
JOIN combine C
  ON T.[Id] = c.[topParent];

SELECT *
FROM Table1;

*使用递归cte的 *输出 将顶级父级分配给每个子级。然后使用XML PATH串联所有CategoryCode

在此处输入图片说明



 类似资料:
  • 更新记录 V2.0.0 加入寄存器运行模式,可大幅提升热更内数值计算性能 执行性能整体提升,传统非寄存器模式执行效率也得到一定幅度提升 修正热更内finnaly块在一些情况下不正确的bug,连带修复了yield return和async/await的一些异常情况 修正值对类型绑定后的数组进行操作时的异常 修正热更内Enum一些情况下Equals结果错误的bug 修正跨域继承接口时的一些异常情况 修

  •  版本更新记录 2016.09.10 1) 底层组件-新增时间处理集合 2016.09.5 1) 底层组件-优化防刷 2) 底层组件-错误监控 2) 底层组件-优化通过类名绑定相关事件 2016.08.25 1) 底层组件-新增百度统计组件 2016.08.11 1) 底层组件-优化udb定制登录,增加QQ登录 2) 活动组件-新增完成任务组件 2016.08.9 1) 活动组件-新增防刷组件

  • 我有一个父表和子表。父记录已由其他进程插入。我需要添加引用父记录的子记录,例如: 插入CHILD记录时,引用父记录的唯一信息是地址。我需要从父表中获取PARENT_ID,使用子的ADDRESS来设置子的FK。 在hibernate中有没有一种方法可以做到这一点,这样我就不需要通过地址查询父项来将其与子记录一起插入?或者,我是否继续沿着这条路径,按地址查询父对象,然后将父对象传递给子对象?

  • 问题内容: 我的数据库表中具有以下格式的数据: 该列将来自该列的数据作为父记录。带有值的表示根项目。我需要编写查询以按以下顺序获取数据: 我需要得到根记录(与记录为0),然后是所有和这根记录,然后获得下根的记录,然后和在这个根记录等等。 问题答案: 我在这里提出的解决方案使用了物化路径的概念。以下是使用样本数据的实例化路径的示例。我希望它可以帮助您理解物化路径的概念: 每个节点都有一个实例化路径,

  • 更新记录命令用于修改特定记录的值。 是更新特定字段值的基本命令。 以下语句是命令的基本语法。 以下是有关上述语法中选项的详细信息。 - 定义要更新的字段。 - 将指定的字段值增加给定的值。 - 在收集字段中添加新项目。 - 从收集字段中移除一个项目。 - 在地图字段中输入条目。 - 用JSON文档内容替换记录内容。 - 将记录内容与JSON文档合并。 - 指定如何锁定加载和更新之间的记录。有两个选

  • 1.2到1.3的变化 功能新增 创建应用新增功能 新增日志设置,可以把对日志的各个输出源进行开关设置。 应用的日志新增输出到fds的功能,可以把应用日志导入到生态链公司自己的dfs中 一个应用现在可以设置多个内部服务端口,应用支持多端口了 提供HTTPS的外部服务时,可以设置白名单限制IP访问 提供HTTPS的外部服务时,增加accesslog选项,可以选择收集该域名的acccesslog日志到s