DISTINCT进入SQL语句不能很好地工作
下面的代码工作正常,一个问题显示了许多记录,它假设只显示一个。 (例如:如果从用户的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();
}
}
你真的应该开始使用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
但是我不明白是什么问题。对所有已定
问题是有两个表UserInfo和广告,所以网站访问者将写入一个单词到搜索文本框,所以这个单词是(结果查询字符串),所以UserInfo表有很多用户信息和这些用户将他们的广告添加到广告表。所以当网站访问者搜索丰田时,它假设向广告表中的广告包含丰田广告的用户信息显示Wtag列。所以问题是,例如,如果肖恩兰格有40个广告进入广告表30,他们有丰田值转换为Wtag,那么它会显示30,它假设只显示一条记录 – samo
然后从查询中删除AD.Wtags或使用top 1 (如果你使用top 1,你还应该包括一个order by)。 –
没办法删除AD.Wtags这是代码的主要部分,我没有尝试过1,但我不认为它会工作。 – samo
由于经过多次尝试如下
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
查询复制到SSMS和手动检查什么不同呢? – CodeNotFound
@CodeNotFound我之前尝试过,但在SSMS中很难做到,因为查询字符串假设存在 – samo
FOr me我认为这是SUBSTRING([CompDesc],1,40)或AD。[Wtags]导致您的问题 – CodeNotFound