employee表对于同一个员工id有多个员工名称.需要从名称表中识别正确的名称

  • 本文关键字:识别 同一个 id employee sql
  • 更新时间 :
  • 英文 :


对于同一个员工id,员工表有多个员工名称。需要从名称表中识别正确的名称,并单独显示匹配的行。如果姓名表中没有员工id,则显示多个员工姓名
空表

id name   status
1  David   0
1  James   1
2  Kelvin  0
2  John    1
Name table
id    Name
1     James

预期输出

Id Name status
1 James  1
2 Kelvin 0
2 John   1

如果我加入内线,那么我将只获得比赛记录。当emp id在employee和name中都可用时,只显示匹配的记录,当empid在empleyee表中不在name表中时,显示所有行。

内部加入员工表上的名称表

例如:

SELECT n.firstname, n.lastname FROM employee AS e INNER JOIN [name] AS n ON e.employee_id = n.employee_id

一个选项是联合两个集合:一个用于匹配行,一个用于不匹配行。

(最初,有Oracle标记,所以我使用在Oracle上工作的CTE表单中的样本数据;无论如何,你都不会键入那段代码,所以忽略它(:

样本数据:

SQL> with
2  emp (id, name, status) as
3    (select 1, 'David' , 0 from dual union all
4     select 1, 'James' , 1 from dual union all
5     select 2, 'Kelvin', 0 from dual union all
6     select 2, 'John'  , 1 from dual
7    ),
8  name (id, name) as
9    (select 1, 'James' from dual)
10  --

查询从这里开始:

11  -- matching rows (James)
12  select e.id, e.name, e.status
13  from emp e join name n on n.id = e.id and n.name = e.name
14  union all
15  -- non-matching rows (Kelvin and John)
16  select e.id, e.name, e.status
17  from emp e
18  where not exists (select null
19                    from name b
20                    where b.id = e.id
21                   )
22  order by id;
ID NAME       STATUS
---------- ------ ----------
1 James           1
2 Kelvin          0
2 John            1
SQL>

最新更新