Sql server SQL Server:查询右联接

Sql server SQL Server:查询右联接,sql-server,Sql Server,我有三张桌子: 用户: Oid | email | pass Oid | Name | Users Oid | Name | Users | Dist Dist: Oid | email | pass Oid | Name | Users Oid | Name | Users | Dist CS: Oid | email | pass Oid | Name | Users Oid | Name | Users | Dist 我想带上所有的用户,还有CS的名字和Dist的名字,如

我有三张桌子:

用户:

Oid | email | pass
Oid | Name | Users
Oid | Name | Users | Dist
Dist:

Oid | email | pass
Oid | Name | Users
Oid | Name | Users | Dist
CS:

Oid | email | pass
Oid | Name | Users
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),我不知道如何找到解决方案,我如何才能解决它


谢谢。

可能是您的sql语法有问题,您正在使用表名进行类似的匹配

其中CS.Dist=Dist.OID

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


明白了吗?

你把一个古老的隐式
JOIN
语法(已经被弃用)和显式语法混合在一起了。这将给您的结果带来一些问题

根据经验,在
FROM
子句中不应该有
。您应该始终使用显式的
JOIN
语法

在这种情况下,使用
左连接
更有逻辑意义。您希望从
Users
中选择所有内容,并从
Dist
CS
中选择记录(如果存在)

这应该可以满足您的需要:

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

提示:
来自用户。。。左连接区。。。。left join cs…
请不要混合隐式和显式连接语法。它引起了极其奇怪的问题。作为经验法则,在
FROM
子句中不应该有逗号。你能分享一下我们如何在查询中只写一个左连接吗?我不知道你在问什么,但我的答案中有
left join
,如果这是你想要的。@muhammadamirshazad你可以使用tblA的
隐式连接表,tblB,其中tblA.Id=tblB.Id
但这不是标准的方法,它还不是的标准方法。一些新版本的DBMS甚至不再完全支持它们。“最好不要使用它们。”西亚尔我完全同意你的看法。但看起来穆罕默德·阿米尔·沙赫扎德(Muhammad Amir SHahzad)说比较
WHERE
子句中不同表的值是行不通的。我认为这应该是基于此逻辑的
d.User=U.OID
。虽然很难从手术中分辨出来,但我认为这会造成一个错误,c区不能被约束,不是吗?这意味着我们需要改变连接的顺序。