访问 Union Query 以获得 Full Outer Join

Access Union Query to get Full Outer Join

我有 2 个表 TestFname 和 TestLname。每个条目都有一些只有名字的条目,一些只有姓氏的条目,还有一些条目既有名字又有姓氏。每个人都有唯一的编号,因此如果 Jack Smith 在 TestFname 中出现为“Jack”,在 TestLname 中出现为“Smith”,则 Jack 的编号在两个表中都是“2”。

我希望查询结果只显示所有唯一的人一次,对于 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,IIf([TestFname.Number] Is Null, [TestLname.Number],[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, [TestLname.Number], [TestFname.Number]), 
   IIf([TestFname.F_name] Is Null, [TestLname.F_Name], [TestFname.F_Name]), 
   IIf([TestFname.L_name] Is Null,[TestLname.L_Name],[TestFname.L_Name]) 
   FROM TestFname 
   RIGHT JOIN TestLname ON TestFname.Number = TestLname.Number;