我有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),我不知道如何解决这个问题,我该如何解决?
感谢。
答案 0 :(得分:2)
您将一种古老的隐式JOIN
语法(已被over 25 years弃用)与一个明确的语法混合使用。这会导致您的结果出现一些问题。
根据经验法则,您应该永远在,
子句中拥有FROM
。您总是使用JOIN
语法显式。
在这种情况下,使用LEFT 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
答案 1 :(得分:-1)
可能是你的sql语法中存在一个问题,你正在使用表名这样的匹配。
WHERE CS.Dist = Dist.OID。
CS 是一个表格而 Dist 也是一个你正在使用赋值运算符的表,你必须在这里更新逻辑比较列桌子不是两张桌子。
得到了吗?