gpt4 book ai didi

mysql - JOIN 语句或不同的方法

转载 作者:行者123 更新时间:2023-11-28 23:21:39 27 4
gpt4 key购买 nike

我的表中只包含了与此相关的列,因此请忽略 Users 和 Address 表中缺少的列。

快速了解系统。 “分销商”是这里的主要纽带,他们位于角色树的顶端。为了创建经理,您需要将他们绑定(bind)到分销商,因此是 DistributorManagerRelationship 表。创建代表时,他们必须与经理相关联,并且该经理只能是与所选分销商相关联的经理。所以在下表集中,Live Labs 是唯一可以创建代表的分销商,因为该帐户下有经理。

地址表

addressId  firstName  lastName  companyName
82 Mary Mertens IRON Co.
83 John Smith Live Labs
84 Lauren Cole NULL
85 Sam Little NULL
86 Wayne Brady NULL
87 Ronald Foster NULL
88 Shawn Wood NULL

用户表

userId  active  username     role          addressId
19 1 mary distributor 82
20 1 john distributor 83
21 1 lauren manager 84
22 1 sam manager 85
23 1 wayne manager 86
24 1 ronald representative 87
25 1 shawn representative 88

分销商经理关系

distributorId  managerId
20 21
20 22
20 23

ManagerRepRelationship

repId  managerId
24 21
24 22
25 22

这是我遇到的问题。当分销商登录并查看他下的所有用户(他的经理和代表)时,我拥有的 SQL 语句将只获取在 ManagerRepRelationship 表中有关系的代表和经理。例如。

SELECT DISTINCT Users.userId, Users.role, Users.username, Address.firstName, Address.lastName
FROM Users
JOIN Address
ON Users.addressId=Address.addressId
JOIN ManagerRepRelationship
ON Users.userId=ManagerRepRelationship.repId
OR Users.userId=ManagerRepRelationship.managerId
JOIN DistributorManagerRelationship
ON Users.userId=DistributorManagerRelationship.managerId
OR ManagerRepRelationship.managerId=DistributorManagerRelationship.managerId
WHERE DistributorManagerRelationship.distributorId=20 AND Users.userId!=20 ORDER BY Address.lastName

上述 SQL 语句将返回与 Live Labs EXCEPT 用户 ID 23 (Wayne Brady) 关联的所有代表和经理。我明白为什么会这样,因为韦恩不匹配 JOIN 的参数,因为他缺少代表。几个小时以来,我一直在与这条 SQL 语句作斗争,但我似乎无法做到正确。我想要的结果是所有经理和代表都绑定(bind)到,在这种情况下,Live Labs 即使在 ManagerRepRelationship 表中没有关系。也许我需要结合两个不同的 JOIN 查询?我卡住了。

我希望我解释得很好,如果我没有说清楚,请发表评论。

最佳答案

如果你想包括没有代表的人,那么你想允许 null 作为代表值,所以而不是

JOIN ManagerRepRelationship

你需要

LEFT JOIN ManagerRepRelationship

关于mysql - JOIN 语句或不同的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41307594/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com