【发布时间】:2020-03-29 19:07:47
【问题描述】:
我有一个如下所示的客户数据库:
ID | Name | Route
------------------------------
001 | John Smith Co. | 132
002 | John Smith #2 | 201
015 | Casa del Sol | 132
019 | Partners | 201
137 | Mary Malones | 132
有些用户是 C 类用户,他们会根据客户编号分配一个或多个客户。一些用户是 R 型用户,他们将被分配一个或多个路线编号,这些编号将他们与这些路线中的所有客户联系起来。
UserID | Name | Type | Link
---------------------------------------------
00001 | Hector Lopez | C | 001
00001 | Hector Lopez | C | 002
00003 | Tonk Lu | R | 132
00309 | Jim Kirk | C | 019
这样做的效果是,Hector 的设备显示客户 001 和 002,Jim 的设备显示客户 019,而 Tonk 的设备显示客户 001、015 和 137。(他们将是连锁店经理、客户和销售代表,分别。)
我正在尝试创建一个查询,显示附加到所有用户的所有客户,如下所示:
UserID | Name | Type | ID | Name
-------------------------------------------------------------
00001 | Hector Lopez | C | 001 | John Smith Co.
00001 | Hector Lopez | C | 002 | John Smith #2
00003 | Tonk Lu | R | 001 | John Smith Co.
00003 | Tonk Lu | R | 015 | Casa del Sol
00003 | Tonk Lu | R | 137 | Mary Malones
00309 | Jim Kirk | C | 019 | Partners
但我对如何处理 R 和 C 逻辑感到困惑。我有两个查询,但理想情况下我希望能够运行一个查询。
Select Users.Username, Users.UserType, Customers.CustomerID, Customers.Name
from Users
left outer join UserLink on Users.Username = UserLink.Username
left outer join Customers on UserLink.LinkID = Customers.CustomerID
where Users.UserType = 'C'
和
Select Users.Username, Users.UserType, Customers.CustomerID, Customers.Name
from Users
left outer join UserLink on Users.Username = UserLink.Username
left outer join Customers on UserLink.LinkID = Customers.Route
where Users.UserType = 'R'
这可能吗?我能找到的关于两列的唯一信息是匹配不止一列的数据,例如 Year = '2010' 和 Mfg = 'Ford'。
谢谢。
【问题讨论】:
标签: sql join left-join where-clause