内部联接没有返回期望的结果

时间:2015-08-26 13:08:24

标签: sql-server filter inner-join where-clause

我使用以下查询查询我的数据:

  Select  
  Convert(varchar(50),PE.dateofstay,103) 'Date of Stay',  
  C.embossname 'EmbossName',  
  PE.pastexperience,  
  U.UserName ,  
  M.merchantname1   
  from card C   
 inner join PastExperience PE on c.EmbossLine=PE.embossline   
 inner join Users U on U.UserId=PE.userid  
 inner join Merchant M on M.MerchantID=U.MerchantID  
    where C.Embossline = '02563987' 
-- and (C.EmbossName Like '%DANIEL MWANGALA%' )
 AND(PE.dateofstay>='2013-11-03 00:00:00.000' and PE.dateofstay<='2015-11-03 00:00:00.000')  

问题是,当我使用EmbossLine过滤它时,我得到了所需的结果,但是当我尝试使用EmbossName过滤它时(我已在此处评论过) 我什么都没得到?我这么坚持了吗?为什么会这样?

1 个答案:

答案 0 :(得分:0)

简答:您的数据库没有任何符合所有WHERE条款标准的记录。

你能做什么: 您已经将EmbossName与问题孩子隔离,现在您需要了解您尝试返回的特定记录与您最初指定的格式不匹配的原因。尝试使搜索更简单,例如:

WHERE C.Embossline = '02563987' 
AND C.EmbossName LIKE '%DAN%'
AND PE.dateofstay >= '2013-11-03 00:00:00.000'
AND PE.dateofstay <= '2015-11-03 00:00:00.000'

如果有效,你可以将其升级为更具体的内容,例如

AND C.EmbossName LIKE '%DANIEL%MWANGALA%'

如果失败,只找到您确定应该匹配的EmbossName记录(没有来自此查询的所有其他联接信息),然后将该值复制并粘贴到文本编辑器中以查找其他字符等在格式化的GUI中可能不太明显。

您的INNER JOIN条件中的一个或多个也可能会出现问题 - 如果这个Daniel家伙存在于C但在您加入的其他表中没有任何相应的数据,则不会显示任何结果。尝试将其中一些INNER JOINs更改为LEFT OUTER JOIN,看看是否有任何结果。如果在连接列中得到一些NULL值的行,那么很有可能您加入了没有任何相应记录的表。