访问联合查询以获取完全外部联接

问题描述

我有2个表TestFname和TestLname。每个条目都有一些仅带有名字的条目,一些仅带有姓氏的条目,有些具有名字和姓氏的条目。每个人都有唯一的编号,因此,如果杰克·史密斯在TestFname中表示为“杰克”,在TestLname中表示为“史密斯”,则在两个表中Jack的编号均为“ 2”。

我希望查询结果只显示一次所有唯一的Person,并且对于Jack Smith,将TestFname中的“ Jack”与TestLname中的“ Smith”组合到查询结果的一条记录“ Jack Smith”中。

    SELECT IIf([TestFname.F_name] Is Null,[TestLname.F_Name],[TestFname.F_Name]) AS FFName,IIf([TestFname.Number] Is Null,[TestLname.Number],[TestFname.Number]) AS Nnumber
FROM TestFname 
LEFT JOIN TestLname 
ON TestFname.Number = TestLname.Number
UNION 
SELECT  IIf([TestFname.L_name] Is Null,[TestLname.L_Name],[TestFname.L_Name]) AS LLName,[TestFname.Number]) AS Nnumber
FROM TestFname 
RIGHT JOIN TestLname 
ON TestFname.Number = TestLname.Number;

这仅提供2列输出:FFName和Nnumber(无LLname),并且Jack Smith出现在2条记录中,而不是在1条记录中出现,FFName和LLname都在单独的列中。

解决方法

两个SELECT语句都需要所有3个计算。

SELECT IIf([TestFname.Number] Is Null,[TestLname.Number],[TestFname.Number]) AS Nnumber,IIf([TestFname.F_name] Is Null,[TestLname.F_Name],[TestFname.F_Name]) AS FFName,IIf([TestFname.L_name] Is Null,[TestLname.L_Name],[TestFname.L_Name]) AS LLName 
   FROM TestFname 
   LEFT JOIN TestLname ON TestFname.Number = TestLname.Number
UNION 
SELECT IIf([TestFname.Number] Is Null,[TestFname.Number]),[TestFname.F_Name]),[TestFname.L_Name]) 
   FROM TestFname 
   RIGHT JOIN TestLname ON TestFname.Number = TestLname.Number;