2016-04-22 59 views
0

下面的代碼工作正常,一個問題顯示了許多記錄,它假設只顯示一個。 (例如:如果從用戶的UserInfo表有10個廣告到廣告表,其中這些廣告5具有相似的查詢字符串結果值值,所以他重複用戶的5倍它假設出現一次什麼他所擁有的廣告,其中Wtag列。)DISTINCT進入SQL語句不能很好地工作

if (Request.QueryString["Searchfor"] != null) 
         { 

          using (SqlConnection srcbizhsql = new SqlConnection(sc)) 
          { 

           srcbizhsql.Open(); 
           SqlDataAdapter DAsearchbiz = new SqlDataAdapter(@"SELECT DISTINCT UI.[UID],UI.[Country],UI.[State],UI.[City],UI.[Logo],UI.[Website],UI.[UsrType],UI.[BizCateg],UI.[BizSubCateg],UI.[Twitter],UI.[GooglePlus],UI.[Facebook],UI.[CompNme],UI.[RegDate] ,SUBSTRING([CompDesc],1,40) AS CompDesc ,AD.[Wtags] FROM UserInfo AS UI , ads AS AD WHERE UI.UID = AD.UID and UI.[Country]= @Location AND UI.[UsrType]= 'Business' AND CHARINDEX(@Wtag, AD.[Wtags])>0 ORDER BY UI.[RegDate] DESC", sc); 

           DataSet DSsrchBiz = new DataSet(); 

           DAsearchbiz.SelectCommand.Parameters.AddWithValue("@Location", cookie.Value); 
           DAsearchbiz.SelectCommand.Parameters.AddWithValue("@Wtag", result); 

           DAsearchbiz.Fill(DSsrchBiz); 
           SrchbizHomLstviw.DataSource = DSsrchBiz.Tables[0]; 
           SrchbizHomLstviw.DataBind(); 
           SrchMultiView.ActiveViewIndex = 1; 
           RebindAds(); 
           RebindJobs(); 

          } 
         } 
+0

查詢複製到SSMS和手動檢查什麼不同呢? – CodeNotFound

+0

@CodeNotFound我之前嘗試過,但在SSMS中很難做到,因爲查詢字符串假設存在 – samo

+0

FOr me我認爲這是SUBSTRING([CompDesc],1,40)或AD。[Wtags]導致您的問題 – CodeNotFound

回答

0

你真的應該開始使用ANSI-92式的連接,而不是舊的ANSI-89的風格。語法已經有20多年了。 http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx

以下是您的查詢與「現代」連接和一些格式。

SELECT DISTINCT UI.[UID] 
    , UI.[Country] 
    , UI.[State] 
    , UI.[City] 
    , UI.[Logo] 
    , UI.[Website] 
    , UI.[UsrType] 
    , UI.[BizCateg] 
    , UI.[BizSubCateg] 
    , UI.[Twitter] 
    , UI.[GooglePlus] 
    , UI.[Facebook] 
    , UI.[CompNme] 
    , UI.[RegDate] 
    , SUBSTRING([CompDesc], 1, 40) AS CompDesc 
    , AD.[Wtags] 
FROM UserInfo AS UI 
JOIN ads AS AD ON UI.UID = AD.UID 
WHERE UI.[Country] = @Location 
    AND UI.[UsrType] = 'Business' 
    AND CHARINDEX(@Wtag, AD.[Wtags])> 0 
ORDER BY UI.[RegDate] DESC 

但是我不明白是什麼問題。對所有已定

+0

問題是有兩個表UserInfo和廣告,所以網站訪問者將寫入一個單詞到搜索文本框,所以這個單詞是(結果查詢字符串),所以UserInfo表有很多用戶信息和這些用戶將他們的廣告添加到廣告表。所以當網站訪問者搜索豐田時,它假設向廣告表中的廣告包含豐田廣告的用戶信息顯示Wtag列。所以問題是,例如,如果肖恩蘭格有40個廣告進入廣告表30,他們有豐田值轉換爲Wtag,那麼它會顯示30,它假設只顯示一條記錄 – samo

+0

然後從查詢中刪除AD.Wtags或使用top 1 (如果你使用top 1,你還應該包括一個order by)。 –

+0

沒辦法刪除AD.Wtags這是代碼的主要部分,我沒有嘗試過1,但我不認爲它會工作。 – samo

0

由於經過多次嘗試如下

SELECT DISTINCT UI.[UID] ,UI.[Country] ,UI.[State] ,UI.[City] ,UI.[Logo] ,UI.[Website] ,UI.[UsrType] ,SUBSTRING(UI.[CompDesc], 1, 60) AS CompDesc ,UI.[BizCateg] ,UI.[BizSubCateg] ,UI.[Twitter] ,UI.[GooglePlus] ,UI.[Facebook] ,UI.[CompNme] ,UI.[RegDate] FROM UserInfo AS UI JOIN (SELECT DISTINCT ads.[UID] FROM ads WHERE CHARINDEX(@Wtag, ads.[Wtags])> 0) AS AD ON AD.[UID] = UI.[UID] WHERE UI.[Country] = @Location AND UI.[UsrType] = 'Business' ORDER BY UI.[RegDate] DESC