Sql 一个表中的输出行在另一个表中不存在匹配项

Sql 一个表中的输出行在另一个表中不存在匹配项,sql,oracle,join,left-join,inner-join,Sql,Oracle,Join,Left Join,Inner Join,我有两张桌子:扫描和人事。在扫描中,有一列createdby,其中包含创建扫描的人员的用户名。我需要创建一个视图来查看这些扫描,但是我想查看personel表中的那个人的全名,而不是用户名。此查询主要用于: select personel.firstname ||' '|| personel.lastname as CREATEDBY from scans inner join personel on scans.createdby = personel.username; 问题是scans.

我有两张桌子:扫描和人事。在扫描中,有一列createdby,其中包含创建扫描的人员的用户名。我需要创建一个视图来查看这些扫描,但是我想查看personel表中的那个人的全名,而不是用户名。此查询主要用于:

select personel.firstname ||' '|| personel.lastname as CREATEDBY
from scans inner join personel on scans.createdby = personel.username;
问题是scans.createdby中有一些用户名不再存在于personel表中,并且由于createdby列中的值与username列中的任何值都不匹配,因此上述查询无法检索这些用户名的扫描

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

因此,如果:

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

但如果:


scans.createdby与任何personel.username=>show username from scans.createdby而不是全名

您想要从scans到personel的左连接,您应该使用coalesce操作符,例如ISNULL或coalesce in SQL Server或函数在查询结果中创建createdby列。

请仔细查看SO问题对于上一个版本,当没有usernsme时,我会得到空条目。在修订之前还可以:还必须为oracle使用NVL函数而不是ISNULL,但这是我的错,我以前没有指定。谢谢你的回答!
select ifnull(personel.firstname + ' ' + personel.lastname, scan.createdby) as CREATEDBY
from scans 
LEFT join personel on scans.createdby = personel.username;
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;