【发布时间】:2019-09-03 23:28:34
【问题描述】:
我有 2 个表 - 部门和员工。
员工表:department_id 是来自部门表(id 列)的外键
|-------------|------------------|---------------|-----------------|
| id | employee_no | department_id |employee_manager |
|-------------|------------------|---------------|-----------------|
| 1 | 34 | 1 | Robert |
| 2 | 34 | 1 | Timothy |
| 3 | 35 | 1 | John |
| 4 | 36 | 2 | Benjamin |
| 5 | 36 | 2 | Bryan |
|-------------|------------------|---------------|-----------------|
部门表:
|-------------|------------------|---------------|
| id | department_name | dept_location |
|-------------|------------------|---------------|
| 1 | Billing | CA |
| 2 | Marketing | NV |
|-------------|------------------|---------------|
我需要一个 sql 查询的帮助,该查询返回employee 表中与department 表中的department_id 匹配且满足以下条件的所有行。
如果部门 id 匹配多个非唯一的employee_no(例如,department_id 1 匹配employee_no 34 和 35),则连接应从部门表中获取“CA”的 dept_location。
如果部门 id 匹配唯一的employee_no 甚至不止一次(例如,department_id 2 匹配employee_no 36 两次),则来自部门表的联接不适用,结果应为“NA”(不适用) 为 dept_location
我的结果应该如下表所示:
|-------------|------------------|---------------------|-----------------|
| id | employee_no | department_location |employee_manager |
|-------------|------------------|---------------------|-----------------|
| 1 | 34 | CA | Robert |
| 2 | 34 | CA | Timothy |
| 3 | 35 | CA | John |
| 4 | 36 | NA | Benjamin |
| 5 | 36 | NA | Bryan |
|-------------|------------------|---------------------|-----------------|
【问题讨论】:
-
如果department_id 与一个employee_no 完全匹配怎么办?
-
如果department_id 只匹配一个employee_no,那么我们不应该加入dept_location 并且department_location 的结果应该是'NA'(不适用)。仅当有 2 个或更多非唯一的employee_no 时,与 dept_location 的连接才有效。我希望这是有道理的。谢谢!
-
那么听起来条件 2 是无关紧要的,基本上如果该部门中有多个不同的员工,我们应该只输出部门位置?
-
@Nick 是的,你明白了。如果只有一名不同的员工,那么我们将部门位置硬编码为“NA”(在这种情况下不适用)而不进行任何联接。对不起,我不够精确。
-
@Nick 您的解决方案非常适合我。感谢您和其他人的时间和精力。