在MS Access中与派生表的右外连接



简单的查询。...我以前在sql中做过它,我觉得却遇到了访问困难。

CREATE TABLE Users (UserID Text, UserName Text)
CREATE TABLE Ages (UserID Text, Age Integer)
INSERT INTO Users (UserID,UserName) VALUES ('A','John')
INSERT INTO Users (UserID,UserName) VALUES ('B','Jane')

我想要一个查询,无论是否在Ages表中有一个条目,都可以返回所有用户ID和用户名。当我尝试以下查询时,我没有返回行:

SELECT T1.UserID, T1.UserName, T2.AGE 
FROM (SELECT UserID, UserName FROM Users) AS T1
RIGHT OUTER JOIN (SELECT UserID, Age FROM Ages) AS T2 
ON T1.UserID = T2.UserID

我希望从上述查询中看到两个行和三列,而两个行的年龄值为无效。相反,我只是没有回头。

我知道我不需要在上面的示例中使用T1的派生表尝试写。

这是一个SQL小提琴,显示带有查询的空结果集(使用SQL Server而不是访问,因此text类型需要更改为varchar())。

这是一个带有left outer join的查询,可以执行您想要的工作:

SELECT u.UserID, u.UserName, a.AGE 
FROM (SELECT UserID, UserName FROM Users) AS u left outer join
     (SELECT UserID, Age FROM Ages) AS a
     ON u.UserID = a.UserID;

记住:left outer join将所有行保存在第一张表中;right outer join将所有行保存在第二个表中。

您描述所需结果的方式不是RIGHT JOIN的工作原理。

RIGHT JOIN将使用"右侧"(从Ages中选定的列)作为主表,并将匹配行连接起来,从左侧没有匹配的null替换为null。这意味着您永远无法从右侧获得右侧的结果。由于您的"右侧"没有行(包含数据或空条目),因此与左侧连接时没有任何比较。因此,您将正确看到未返回的结果。

最新更新