2015-08-26 77 views
-2

我用下面的查詢查詢我的數據:INNER JOIN沒有返回期望的結果

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對其進行過濾(我已經評論過,在這裏) 我沒有得到任何東西?我很困惑這個?這是爲什麼發生?

+2

提供樣品數據。 –

+1

你確定你得到像'DANIEL MWANGALA'這樣的EmbossName,例如'DANIEL MWANGALA'。搜索'LIKE'%詞組'%''因爲它不是SARG- – lad2025

+0

這是非常糟糕的做法。該查詢沒有任何語法錯誤。我們需要查看您的數據,找出爲什麼沒有返回帶有該EmbossName的卡片。 – JBond

回答

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標準中的一個或多個也可能會造成問題 - 如果此丹尼爾研究員存在於C中,但您加入的其他表中沒有任何相應的數據,則不會顯示任何結果。嘗試將其中一些INNER JOINs更改爲LEFT OUTER JOIN並查看是否得到任何結果。如果在連接的列中得到一些包含NULL值的行,那麼很有可能您加入了沒有任何相應記錄的表。