问题标签 [self-referencing-table]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
529 浏览

laravel - 在单独的表上进行自引用 - Laravel 中的 BoM

我很好奇是否有一种简单的方法可以使用 eloquent 实现材料清单(组件)类型的递归系统?这是我正在使用的两个表结构:

inventory桌子:

+----+------------+-------------+ | id | name | is_assembly | +----+------------+-------------+ | 1 | Table | 1 | +----+------------+-------------+ | 2 | Table Top | 0 | +----+------------+-------------+ | 3 | Table Legs | 0 | +----+------------+-------------+

inventory_assemblies桌子:

+----+--------------+---------+----------+ | id | inventory_id | part_id | quantity | +----+--------------+---------+----------+ | 1 | 1 | 1 | 1 | +----+--------------+---------+----------+ | 2 | 1 | 2 | 1 | +----+--------------+---------+----------+ | 3 | 1 | 3 | 4 | +----+--------------+---------+----------+

此组装表应表示“1 个桌子包含 1 个桌面和 4 个桌腿”。

库存模型:

InventoryAssembly 模型:

现在这可行,但是如果我将一个项目添加到自身的程序集中,它会得到一个无限循环。所以这是我的问题:

  • 如何防止无限递归查询?
  • 我这样做对吗?
  • 有没有更简单的方法?
  • BoM 模型是否更适合嵌套集设计?

我真的很难理解自引用重复查询。我真的很感谢任何帮助,在此先感谢!

编辑:使用 user3158900 建议的库存模型本身的属于多个关系,我能够执行递归汇编查询,如下所示:

库存模型(从下面的答案修改):

检索单个级别的程序集:

检索完整的递归程序集结果:

0 投票
3 回答
812 浏览

entity-framework - 具有多个父属性、单个子集合的 EF6 自引用表

我有一个引用自身的表,但我正在努力获得我想要的映射。我希望能够将孩子定义为具有特定人作为母亲、父亲和/或监护人的人的集合。监护人可以是父亲或母亲。

我想要一个可以在列出人员的地方浏览的人员树形视图;用户可以展开一个人的节点以显示该人的所有孩子,而不考虑孩子定义的关系(母亲、父亲或监护人)。

现在,任何帮助将不胜感激,我的观点必须如下所示:

0 投票
1 回答
134 浏览

sql - Oracle:递归自引用连接与第 n 级记录

我有这样的自引用表:

结果我需要第 n 级父级。例如二级家长

0 投票
2 回答
277 浏览

mysql - MySQL 创建一个可以为空的外键,它引用同一张表上的 id 字段

我试图使 Post 表中的“in_reply_to”字段成为可空外键,该外键引用同一表上的 id 字段。基本上,如果此字段为空,则该帖子不是对另一个帖子的回复——如果它不为空,那么该帖子是对具有匹配 id 的帖子的回复,如果这有意义的话。但是当我通过 mysql 运行我的文件时,我收到以下错误。

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 '(160) 、 FOREIGN KEY (userID) REFERENCES users(userID)、 FOREIGN KEY (in_reply_' 在第 6 行查询 OK,0 行受影响 (0.36 秒) 附近使用正确的语法)

所以它说我写的命令有问题,但我无法确定我做错了什么。

这是sql文件的内容

因此,如果您对如何使其引用帖子的 id 有任何指示,我将不胜感激。

0 投票
1 回答
105 浏览

postgresql - 选择 [COLUMN_NAME] AS,自引用表

以下是我对自引用表 emp_tabref1 执行的函数get_reportees

emp_tabref1的表结构:

我想要返回的是我们传递的 id 的层次结构(上下),它将具有 emp_name、emp_id、mgr_id 和mgr_name

但是我的函数是这样返回的:

我的预期输出在哪里

该函数应返回经理姓名而不是员工姓名。请帮忙!

0 投票
1 回答
217 浏览

c# - EF 转换以查看模型树结构

我在实体框架中有一个模型,在同一张表中有父子关系。它是一个 0,1 到多映射。现在它有许多属性,在一种情况下,我不想要所有这些属性,只需要 Id、Name 和 Children。

我希望将这些列表转换为

我正在做如下。

并得到错误

无法将“System.Data.Entity.DynamicProxies.Foo_ALongNoInHexadecimal”类型的对象转换为“Namespace.ViewModel.FooModel”类型。

有没有办法将树结构投射到树的视图模型?

0 投票
1 回答
141 浏览

mysql - 从mysql自引用表和另一个表创建视图

我有一个带有字段 id 和父级的表“组织”。parent 引用同一个表(自引用键)。

我有另一个名为“user_organization”的表,其中有 user_id 和 org_id。org_id 链接到“组织”表中的 id。

现在我想创建一个视图,使用这两个包含 user_id 和 organization_id 的表。由于一个组织的成员将是所有子组织的成员,因此该视图将包含来自实际 user_organization 表的额外值。

如何创建此视图?

0 投票
2 回答
450 浏览

oracle - 从 Oracle 迁移到 MariaDB - 触发器、自引用表

我正在将我的 Oracle 数据库迁移到 MariaDB,但我不确定如何在我的一张表上创建自引用 ID。

本质上,如果 abelongs_to_id没有指定,它将假定它属于自己(并且与生成的 ID 相同ON INSERT);但是,如果belongs_to_id已指定 a,那么它将使用它来代替。

我这样做的原因是因为我将帖子和回复存储在同一个表中。如果id= belongs_to_id,那么它是一个发起帖子,而如果它不同,它是对另一个帖子的回复。

我曾考虑让我的应用程序(Node JS)快速UPDATE使用 last_insert_id - 但它看起来相当混乱,如果可能的话我想避免这种情况。

这是我在 Oracle 中使用的 - 有人知道我如何在 MariaDB 中复制它吗?

0 投票
1 回答
494 浏览

sql-server - 如何在级联上删除自引用关系?

我有一个具有自动引用关系的表,如下所示:

表A(IDTableA,IDTableARoot,...)

我有这个而不是删除触发器来删除:

我想我有这两行:

第 1 行:IDTableA:1 IDTableARoot:1

第 2 行:IDTableA:2 IDTableARoot:1

当我尝试删除第 1 行时:

只有它被删除了 ID = 1 的行,而不是 ID = 2 的行,但它应该被删除,因为在触发器的第一条语句中我说我必须删除 IDTableARoot = IDTableA 其中 IDTableA 的行是我要删除的行的 ID。

那么,如何删除属于自我关系的级联行?

非常感谢。

0 投票
0 回答
291 浏览

django - 如何在 Django 中使用带有自引用表的 dumpdata/loaddata?

我有一个 Django 1.7 应用程序,针对 sqlite3 开发,并迁移到 Postgresql。一个名为 Place 的模型表与其自身具有父关系。我使用 dumpdata 创建一个 .json 提取。

当我尝试使用 loaddata 将提取数据读入 Postgres 数据库时,Django(不是 postgres)给了我:

django.core.serializers.base.DeserializationError: Problem installing fixture '/home/ugliest/project/thub/dbdump25jan_nat.json': Place matching query does not exist;

这告诉我 django 在将数据加载到数据库之前正在验证数据。有没有办法在验证之前允许这些数据?我知道 Postgres 具有延迟约束检查的能力,但即使我可以从 django 触发它,它也不会阻止 django 验证。怎么把数据弄进去?

我觉得我错过了一些明显的东西。这似乎经常发生,并且有一个已知的简单修复。我真的必须编写一些自定义的混乱来重新排序提取文件吗?

编辑:FWIW,从未找到答案,并写了一个自定义的混乱来重新排序。