在一个表中输出行,在另一个表中不存在匹配

时间:2014-10-30 14:19:52

标签: sql oracle join left-join inner-join

我有两个表:scanspersonel。在scans中,有一列createdby,其中创建扫描的人员的用户名就在那里。我需要创建一个视图,在哪里查看这些扫描但不是用户名,我想查看表personel中我所拥有的人的全名。此查询主要有效:

select personel.firstname ||' '|| personel.lastname as CREATEDBY
from scans inner join personel on scans.createdby = personel.username;

问题是scans.createdby中的某些用户名在personel表中已不再存在,并且上述查询未检索到他们的扫描,因为createdby中的值1}}列与username列中的任何值都不匹配。

因此,对于这种情况,我想从createdby输出这些扫描的值。

所以如果:

scans.createdby = personel.username =>显示全名

但是如果:

scans.createdby不匹配任何personel.username =>显示scans.createdby的用户名而不是全名

3 个答案:

答案 0 :(得分:2)

select ifnull(personel.firstname + ' ' + personel.lastname, scan.createdby) as CREATEDBY
from scans 
LEFT join personel on scans.createdby = personel.username;

答案 1 :(得分:2)

您想要从scanspersonel的左连接,并且您应该使用coalesce运算符(例如SQL Server中的ISNULLCOALESCE)或函数来创建{查询结果中的{1}}列。

答案 2 :(得分:2)

select case when personel.username is null then scans.createdby else personel.firstname ||' '|| personel.lastname end as CREATEDBY
from scans left outer join personel on scans.createdby = personel.username;