简单的查询。...我以前在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。这意味着您永远无法从右侧获得右侧的结果。由于您的"右侧"没有行(包含数据或空条目),因此与左侧连接时没有任何比较。因此,您将正确看到未返回的结果。