首页 > 解决方案 > 仅当表 a 包含表 b 中的相应 ID 时才返回表 a 的值

问题描述

我曾尝试寻找答案,但很难提出问题或制定搜索以找到答案。所以这里。

我有存储客户信息的表 A 和存储客户请求的表 B。我正在构建一个搜索工具,我想在其中搜索 Bob 帮助过的客户。这变得很棘手,因为我只希望 Bob 帮助的每个客户返回 1 行。使用普通连接将返回多行,因为 Bob 帮助该客户的请求不止一个。

见下表结构。(还不能添加图片:()

表设置

例如,以下查询返回多行(5 行,因为 Bob 处理了 5 个请求)。

SELECT a.ClientName, b.AttendedBy
FROM TableA A 
JOIN TableB b ON a.ClientId = b.ClientId
WHERE b.AttendedBy = 'Peter'

所以我想要的结果如下:

结果

如果我想知道 Peter 参加过哪些客户,那么结果 1,如果我想知道 Andrew 参加过哪些客户,那么结果 2。如果我搜索“Michael”,则必须为该客户返回 NO 结果。所以基本没什么。仅显示客户端请求中存在“attendedBy”的客户端(表 b)。

我尝试了多种方法,例如 WHEREclause 中的 DISTINCT SELECT、STUFF() 函数、TOP 1、LIMIT,但我没有获胜。协助将不胜感激。谢谢!

编辑:ps、表 B 和 B 具有其他具有唯一值的列,因此使用 DISTINCT 仍会为彼得参加的同一客户返回多行。

标签: sqlsql-server

解决方案


如果我理解正确,您只需要select distinct

SELECT DISTINCT a.ClientName, b.AttendedBy
FROM TableA A JOIN
     TableB b
     ON a.ClientId = b.ClientId
WHERE b.AttendedBy = 'Peter'

推荐阅读