Sql 连接多个参数

Sql 连接多个参数,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,当我加入一个参数时,我会得到结果: join SalesMapping m on (c.[MLIS Practice ID] = m.MLIS) 但是,当我加入2个参数时,得到0个结果: join SalesMapping m on (c.[MLIS Practice ID] = m.MLIS and ltrim(rtrim(c.[QuikLab Practice Code]))=ltrim(rtrim(m.[Practice Code]))) 我检查了我的源表,以检查此联接是否

当我加入一个参数时,我会得到结果:

join

SalesMapping m

on

(c.[MLIS Practice ID] = m.MLIS)
但是,当我加入2个参数时,得到0个结果:

join

SalesMapping m

on

(c.[MLIS Practice ID] = m.MLIS and ltrim(rtrim(c.[QuikLab Practice Code]))=ltrim(rtrim(m.[Practice Code])))
我检查了我的源表,以检查此联接是否会产生任何结果,当然会

以下是我的全部疑问:

select 
[rep name]=m.[Sales Rep],
[css name]=m.[CSS Rep],
m.[Practice Name],
m.[Practice Code],

[MLIS Code]=m.[MLIS],
[Yesterday Volume]=(select 
                    COUNT([accession id]) 
                    from SpecimenCount 
                    where [MLIS Practice ID]=m.[MLIS]
                    and [Date Received]=CAST(getdate()-2 as DATE)),
[Today Volume] = (select 
                    COUNT([accession id]) 
                    from SpecimenCount 
                    where [MLIS Practice ID]=m.[MLIS]
                    and [Date Received]=CAST(getdate()-1 as DATE)),
[Rep Email]=m.[sales rep],
[CSS Email]=m.[css rep],
[Manager Email]=m.manager

from 

SpecimenCount c

join

SalesMapping m

on

(c.[MLIS Practice ID] = m.MLIS and c.[quiklab practice code]=m.[practice code])

join 

ManagerNames

on ManagerNames.Name = m.Manager
为什么我的查询(在两个条件下连接)返回0个结果

以下是我对以下内容的思考过程:

c.[MLIS Practice ID] = m.MLIS and c.[quiklab practice code]=m.[practice code]
我们完全可以加入这两个数据集,原因如下:

+----------+----------+---------------+---------------+-----------------------+-----------+------------------+------------------+--------------+-----------+-----------+---------------+
| rep name | css name | Practice Name | Practice Code | quiklab practice code | MLIS Code | MLIS Practice ID | Yesterday Volume | Today Volume | Rep Email | CSS Email | Manager Email |
+----------+----------+---------------+---------------+-----------------------+-----------+------------------+------------------+--------------+-----------+-----------+---------------+
| na       | na       | na            | SCPMA         | SCPMA                 |    100004 |           100004 |               10 |            3 | na        | na        | na            |
+----------+----------+---------------+---------------+-----------------------+-----------+------------------+------------------+--------------+-----------+-----------+---------------+

正如您所看到的,代码
100004
SCPMA
是相同的,应该连接在一起

,因此您已经验证了现有的MLI和实践代码是否会连接。。。但是还有第三个条件,因为你也要加入经理的行列。我在您的示例数据中没有看到管理器,但我愿意打赌,没有管理器匹配mlis/实践代码对


通常,识别这种情况的一种简单方法是逐个检查连接,并将其注释掉或转换为左连接。一旦数据返回,您就知道是什么导致了问题。

因此您已经验证了现有的MLI和实践代码将加入。。。但是还有第三个条件,因为你也要加入经理的行列。我在您的示例数据中没有看到管理器,但我愿意打赌,没有管理器匹配mlis/实践代码对


通常,识别这种情况的一种简单方法是逐个检查连接,并将其注释掉或转换为左连接。一旦数据返回,您就知道是什么导致了问题。

您能确定结果集中是否存在一行吗?您能否验证数据是否在表中?我遇到这种麻烦的最常见的方式是对列使用错误的名称

哦,不要做部分别名,它给我带来了很多麻烦,最终也会给你带来麻烦。(别名ManagerNames)

首先,在
MangerName.Name=SalesMapping.Manager

select distinct Name from ManagerNames

select distinct Name from ManagerNames
except 
select distinct Manager from SalesMapping

--get less rows with the second query.
其次,验证SpecimenCount之间是否存在匹配项

select distinct [MLIS Practice ID],[quiklab practice code] from SpecimenCount

select distinct [MLIS Practice ID],[quiklab practice code] from SpecimenCount
except
select MLIS,[practice code] from SalesMapping.

--get less rows with the second query.
您可能会发现,数据不匹配。然后,您必须回到开发人员那里,获取关于如何填充表的更多信息,以便能够匹配列。由于没有人费心让列名相同,我猜匹配不会很简单


祝你好运。

你能识别出结果集中是否存在一行吗?您能否验证数据是否在表中?我遇到这种麻烦的最常见的方式是对列使用错误的名称

哦,不要做部分别名,它给我带来了很多麻烦,最终也会给你带来麻烦。(别名ManagerNames)

首先,在
MangerName.Name=SalesMapping.Manager

select distinct Name from ManagerNames

select distinct Name from ManagerNames
except 
select distinct Manager from SalesMapping

--get less rows with the second query.
其次,验证SpecimenCount之间是否存在匹配项

select distinct [MLIS Practice ID],[quiklab practice code] from SpecimenCount

select distinct [MLIS Practice ID],[quiklab practice code] from SpecimenCount
except
select MLIS,[practice code] from SalesMapping.

--get less rows with the second query.
您可能会发现,数据不匹配。然后,您必须回到开发人员那里,获取关于如何填充表的更多信息,以便能够匹配列。由于没有人费心让列名相同,我猜匹配不会很简单


祝你好运。

好的。有没有可能你没有空格,但是有隐藏的、不可打印的字符(比如TAB)?这将导致连接失败。

好的,您是否可能没有空格,但有隐藏的、不可打印的字符(如TAB)?这将导致连接失败。

我检查了我的源表,以检查此连接是否会产生任何结果,当然会显然不会,否则你会得到那些结果!你凭什么认为会这样?你能更详细地解释你的推理吗?这样我们就可以看出你的错误所在了。@MarkByers谢谢你。我提供了更多信息,
ManagerNames.Name
m.Manager
的信息在哪里?如果另一个加入有效,但管理者名称无效,这可能也是您的问题。我只能做一件事。。因为其中一个连接是字符串类型的,所以它可能会因一个空格而失败。。你能修剪它们还是强迫它们精确到马赫数?@gbianchi它们都是varchar(50)
我检查了我的源表,检查这个连接是否会产生任何结果,当然会显然不会,否则你会得到那些结果!你凭什么认为会这样?你能更详细地解释你的推理吗?这样我们就可以看出你的错误所在了。@MarkByers谢谢你。我提供了更多信息,
ManagerNames.Name
m.Manager
的信息在哪里?如果另一个加入有效,但管理者名称无效,这可能也是您的问题。我只能做一件事。。因为其中一个连接是字符串类型的,所以它可能会因一个空格而失败。。你能修剪它们还是强迫它们精确到马赫数?@gbianchi他们都是varchar(50)非常好的想法!我忽略了最后一次加入manager,仍然得到0个结果非常好的想法!我漏掉了最后一次加入manager的机会,结果仍然是0 Jerry非常感谢你的帮助。在第一组查询中,第二组查询返回0行,而在第二组查询中,两个查询都返回等量的行Jerry非常感谢您的帮助。在第一组查询中,第二组查询返回0行,而在第二组查询中,两个查询都返回等量的行