对列进行 api 调用时,如何从同一表的另一列侧加载某些内容?

Posted

技术标签:

【中文标题】对列进行 api 调用时,如何从同一表的另一列侧加载某些内容?【英文标题】:how to side load something from another column of the same table when making an api call to a column? 【发布时间】:2021-09-21 05:48:24 【问题描述】:

假设我有一个包含两个属性的任务表,一个作为 Id,另一个作为父 id 以及其他属性。

现在我有两种类型的任务: 一个是主任务,其父 Id 为 null,另一种类型的任务是子任务,其父 Id 作为它所属的同一个表中的另一个任务。我可以创建一个既作为任务也作为子任务的任务(提供哪个任务是它的父任务)

当我调用 api 来获取任务时,我会根据 过滤器。

过滤器还具有显示父任务 ID 和 parent_task_name 的选项。

但这里的问题是,由于它们在同一个表中,因此 api 调用不会侧加载同一个表本身,而是进行额外调用以再次加载 parent_task 列。

我知道我们可以在一开始就创建两个表,一个作为任务,另一个作为子任务,但现在不可行。

那么我怎样才能避免额外的 api 调用只是为了获取 parent_task_name 并在同一个 api 调用中加载父任务 ID 及其名称。

【问题讨论】:

能否提供代码sn-p。 【参考方案1】:

由于您尚未共享代码,因此不确定您是如何尝试这样做的,但我能想到的一种方法是使用连接:

records = ChildModel.joins('INNER JOIN task_table AS parent ON task_table.parent_id = parent.id').select('task_table.*, parent.name AS parent_task_name').where(id: array_of_ids)

这里的task_table 将是您的表的名称。

因此,我们在这里使用别名将表与自身连接起来,并从中获取父任务属性。获取父任务名称:

records.last.parent_task_name

这样您可以在单个查询中获取记录。

【讨论】:

以上是关于对列进行 api 调用时,如何从同一表的另一列侧加载某些内容?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL:使用来自同一表的另一列的数据更新表

如何将约束添加到 MYSQL 中的列仅以保存已存在于同一表的另一列中的值? [复制]

pl/sql-create trigger on a table - 每当在同一个表中插入新记录时,应更新表的另一列

使用同一表中另一列的数据计数更新一列? [关闭]

使用 DB2,您如何为一列选择具有 MAX 的行,然后在同一张表的另一列的结果子集中选择具有 MAX 的行?

转换后将数据从一列复制到同一表中的另一列