【发布时间】:2025-12-09 21:20:07
【问题描述】:
我有三个表:Clients、Services 和 Client Locations。我正在运行一个查询,该查询需要返回接收特定服务的客户端的位置。所以在 SELECT 中使用第二个表,在 WHERE 中使用第三个表。我正在使用两个 LEFT JOIN 并以不合需要的方式重复我的结果。
这是三个表的简化版本...
客户(客户)
id_client | clientName
----------------------
1 | Abby
2 | Betty
3 | Cathy
Client Services(服务)仅在 WHERE 语句中使用
id_client | date | serviceType
-----------------------------------
1 | 1/5/2015 | Counseling
1 | 1/12/2015 | Counseling
1 | 1/19/2015 | Counseling
2 | 1/21/2015 | Sup. Group
客户位置(locations)只在SELECT语句中使用
id_client | city
----------------------
1 | Boston, MA
3 | Providence, RI
这里是查询
SELECT clients.clientName,locations.city
FROM clients
LEFT JOIN locations ON clients.id_client=locations.id_client
LEFT JOIN services ON clients.id_client=services.id_client
WHERE services.serviceType='Counseling'
结果
clientName | city
-----------------------
Abby | Boston, MA
Abby | Boston, MA
Abby | Boston, MA
所以这让我 Abby 住在波士顿 3 次,而不是想要的那次。
现在,我确切地知道为什么会发生这种情况。用于服务表的 LEFT JOIN 正在用于结果,并且 Abby 的 3 次咨询会导致该城市重复 3 次。
是否有另一种方法来执行此 JOIN 以便服务表不会导致这样的重复?我已经尝试过 INNER JOIN 并得到了同样的结果。
【问题讨论】:
-
您应该注意,您的查询在服务上使用左连接,而 where 子句中的条件基本上使其成为内连接。