mysql - SQL:如何加入分层表关系

标签 mysql sql join

我有 3 个表,分别是 DepartmentOfficeDivision

假设流程是:Department has Offices has Division

但有些情况下 Divisions 直接向 Departments 报告

示例数据

Department   Office                Division
[id][name]   [dept_id][id][name]   [dept_id][off_id][id][name]
[ 1][A   ]   [     1 ][ 1][D   ]   [     1 ][    2 ][ 1][G   ]
[ 2][B   ]   [     1 ][ 2][E   ]   [     3 ][ NULL ][ 2][H   ]
[ 3][C   ]   [     3 ][ 3][F   ]   [     3 ][   3  ][ 3][I   ]

显示所有部门的期望输出:

OUTPUT
[AS dept_name][AS off_name][AS div_name]
[      A     ][     E     ][     G     ]
[      C     ][    NULL   ][     H     ]
[      C     ][     F     ][     I     ]

我当前的查询是:

    SELECT * FROM `Division` A 
    RIGHT JOIN `Office` B ON A.`off_id` = B.`id` 
    RIGHT JOIN `Department` C ON A.`dept_id` = C.`id`;

我的查询是错误的,所以我正在寻找一种方法来连接这 3 个表以获得所需的输出

最佳答案

如果要显示所有部门,需要使用LEFT JOIN

SELECT
  Department.`name` AS dept_name, 
  Office.`name` AS off_name,
  Division.`name` AS div_name
FROM
  Division 
  LEFT JOIN Office ON Division.off_id = Office.id
  LEFT JOIN Department ON Division`.dept_id = Department.id;

关于mysql - SQL:如何加入分层表关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44197184/

相关文章:

php - 检查字符串中彼此相邻的小写字母和大写字母?

mysql - 在VB.Net中的标签上显示数据库记录

php - Doctrine 同表关系问题?

mysql - 我应该如何在我的 SQL 查询中实现和 IF 语句?

mysql - 显示值的百分比 mysql

sql - Oracle Apex 饼图 SQL 语句

mysql - 如何从表中检索数据并将 id 转换为名称?

sql - 将2个SQL SELECT结果集合并为一个

MySQL 连接空值

mysql - 连接数据透视表时 Laravel 作用域返回多个元素