【发布时间】:2021-12-08 17:47:26
【问题描述】:
我在公司数据库中有两个名为 employee 和 branch 的表,每个表都有一个外键。 employee 表如下所示:
+------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+----------------+
| emp_id | int | NO | PRI | NULL | auto_increment |
| first_name | varchar(30) | YES | | NULL | |
| last_name | varchar(30) | YES | | NULL | |
| birth_date | date | YES | | NULL | |
| sex | varchar(1) | YES | | NULL | |
| salary | int | YES | | NULL | |
| super_id | int | YES | MUL | NULL | |
| branch_id | int | YES | MUL | NULL | |
+------------+-------------+------+-----+---------+----------------+
分支表是这样的:
+----------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+-------+
| branch_id | int | NO | PRI | NULL | |
| branch_name | varchar(30) | YES | | NULL | |
| mgr_id | int | YES | MUL | NULL | |
| mgr_start_date | date | YES | | NULL | |
+----------------+-------------+------+-----+---------+-------+
在雇员表中,branch_id 外键引用了branch 表的branch_id。在分支表中,manager_id 外键引用了employee 表的employee_id。
我会以循环方式(非正式地说)在这两个表之间形成两个连接,这样employee.branch_id 与branch.branch_id 形成一个连接,而branch.manager_id 与@ 形成一个连接987654341@.
所以我希望这两个连接的查询返回的是:
employee.first_name AS employee_name, employee.branch_id, branch.branch_name, branch.manager_id, employee.employee_id AS manager_name
我想不出这个问题的可能解决方案,因为每个联接中的 LEFT 表都不相同,而且我不知道如何在单个 SQL 查询中为每个联接定义多个 LEFT 表。
数据库管理系统:MySQL v8.0.26
P.S:我的问题与上述问题中的this question 不同,两个连接的 LEFT 表是相同的,而在我的情况下,它不是。
【问题讨论】:
-
不清楚您的假设或确切问题是什么,请提出 1 个清晰准确的完整问题及其示例。根据权威文件证明,人们可能会发现自己的误解。请在代码问题中提供minimal reproducible example。使用足够多的单词、句子和对部分示例的引用来清楚完整地表达你的意思。 PS将与您的问题相关的所有内容放在帖子本身并将其与您的帖子相关联,不要指望我们阅读另一篇帖子并猜测相关的内容或方式。 How to AskHelp center
-
@philipxy 我会以更好的方式编辑和重写问题。对不起,不清楚的问题。
-
FKs ("relationships") are not needed to query. (And tables represent relation(ship)s/associations.) 约束(包括 FK 和 PK)不需要为了记录或查询而持有、声明或知道。联接是二元的,左表是一系列先前不带括号的联接的结果。除了输出列的顺序,inner & cross join 没有方向,t join u on c 就是 u join t on c。您只需要在点之前提及一个表格/别名。
-
我认为显示表格的最佳方式是执行
SHOW CREATE TABLE table_name;并将结果发布到您的问题中。它不仅会显示列名。