访问 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;
我有 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;