SQL Server:查询右连接

时间:2017-07-19 19:45:00

标签: sql-server

我有3张桌子:

用户:

Oid | email | pass

距离:

Oid | Name | Users

CS:

Oid | Name | Users | Dist

我想带来所有用户以及CS的名称和Dist的名称,如果是这样的话。

这就是我的尝试:

SELECT 
    Users.*, CS.OID as OidCS, CS.Name as NameCs,
    Dist.OID as OidDist, Dist.Name as NameDist
FROM
    Dist, Users
RIGHT JOIN 
    CS on CS.Users = Users.OID
WHERE 
    CS.Dist = Dist.OID

但是这个查询并没有给我带来Dist用户,我需要他们(Cs和Dist),我不知道如何解决这个问题,我该如何解决?

感谢。

2 个答案:

答案 0 :(得分:2)

您将一种古老的隐式JOIN语法(已被over 25 years弃用)与一个明确的语法混合使用。这会导致您的结果出现一些问题。

根据经验法则,您应该永远,子句中拥有FROM。您总是使用JOIN语法显式。

在这种情况下,使用LEFT JOIN更具逻辑意义。您希望从Users中选择所有内容,并选择DistCS中的记录(如果存在)。

这可以满足您的需求:

Select      U.*, C.OID As OIDCS, C.Name As NameCs,
            D.OID As OIDDist, D.Name As NameDist
From        Users   U
Left Join   CS      C   On  U.OID = C.Users
Left Join   Dist    D   On  D.OID = C.Dist

答案 1 :(得分:-1)

可能是你的sql语法中存在一个问题,你正在使用表名这样的匹配。

WHERE CS.Dist = Dist.OID。

CS 是一个表格 Dist 也是一个你正在使用赋值运算符的表,你必须在这里更新逻辑比较列桌子不是两张桌子。

得到了吗?