【问题标题】:Access Union Query to get Full Outer Join [closed]访问联合查询以获取完整的外部联接 [关闭]
【发布时间】:2025-12-16 15:10:02
【问题描述】:

我有 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 都在不同的列中。

【问题讨论】:

    标签: ms-access union full-outer-join


    【解决方案1】:

    在两个 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;
    

    【讨论】:

      最近更新 更多