mysql - SQL - 表示一元(递归)关系

标签 mysql sql database hierarchical-data

我必须实现一个以这种方式工作的一元关系:

有一个实体,称为员工,每个员工都可以由另一个员工管理,直到老板不受任何人管理。

我尝试了这个查询:

CREATE TABLE employee
    (id         INTEGER PRIMARY KEY,
     name       VARCHAR(40) NOT NULL,
     managed_by INTEGER REFERENCES employee);

但不起作用,因为我认为,在 SQL 中,外键无法引用其自己的实体。

如何以正确的方式表示这种递归关系?

最佳答案

是的,外键可以引用它自己的实体。这是一种非常常见的模式。

它看起来像这样:

CREATE TABLE `employee` (
  `id` int NOT NULL,
  `name` varchar(40) NOT NULL,
  `managed_by` int DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `managed_by` (`managed_by`),
  CONSTRAINT `employee_ibfk_1` FOREIGN KEY (`managed_by`) REFERENCES `employee` (`id`)
);

不过,查询递归关系有点棘手。您可能想阅读我对 What is the most efficient/elegant way to parse a flat table into a tree? 的回答

关于mysql - SQL - 表示一元(递归)关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59570344/

相关文章:

mysql - 如何编写 A 包含( "a"或 "b")的 MySQL 查询

java - 使用 postgres 进行 hibernate 配置(使用 webnms)

Android 预填充数据库 - 发布后添加新的预填充行

mysql - 时间计算(到下一个时段的回合时间)

database - 通过 JDBC 连接到 Talend 中的 OpenEdge

php - 计算数据库字段上的代码行数

php - 无法创建迁移 phinx

java - Maven 和 Hsqldb : org. hsqldb.HsqlException : Client driver version greater than '2.1.0.0' is required. HSQLDB 服务器版本为 '2.3.4'(在 mac 上)

php - 在 PHP 中对数组进行排序与​​从 SQL 中获取数据

mysql - 需要优化一个PHP框架的mysql查询