早上发了一贴,把三张表的数据存到一个DataSet中,这个已经做到,可是uname这个字段中有重复的数据,怎么样能把这些重复数据去掉呢?

解决方案 »

  1.   

    先遍历保存UNAME
    然后
    在遍历的过程中
    发现相同的就移除
      

  2.   

    忘贴代码了,补上:
    SqlConnection conn = new SqlConnection("server=.;uid=sa;database=pubs");
            SqlDataAdapter da = new SqlDataAdapter("select uname from test", conn);
            SqlDataAdapter da1 = new SqlDataAdapter("select uname from test1", conn);
            SqlDataAdapter da2 = new SqlDataAdapter("select uname from test2", conn);
            DataSet ds = new DataSet();
            da.Fill(ds, "one");
            da1.Fill(ds, "two");
            da2.Fill(ds, "three");
            ds.Tables["one"].Merge(ds.Tables["two"]);
            ds.Tables["one"].Merge(ds.Tables["three"]);
            
            GridView1.DataSource = ds.Tables["one"];
            GridView1.DataBind();
      

  3.   

    SqlDataAdapter da = new SqlDataAdapter("select distinct uname from test", conn); 
            SqlDataAdapter da1 = new SqlDataAdapter("select distinct  uname from test1", conn); 
            SqlDataAdapter da2 = new SqlDataAdapter("select distinct uname from test2", conn); 
      

  4.   

    SqlDataAdapter da = new SqlDataAdapter("select uname from test ", conn); 
            SqlDataAdapter da1 = new SqlDataAdapter("select uname from test1", conn); 
            SqlDataAdapter da2 = new SqlDataAdapter("select uname from test2", conn); 
    查询的时候后面多个group by 字段  
    这样可以实现
    比如 select uname from test  group by uname 
      

  5.   

    我没讲清楚,这三张表之间也有重复的,比如test的uname中有一条数据为aaaa,在test2中也有一条aaaa,这样我他把三个表都整合在一个dataSet,用GridView显示出来后,会有两条aaaa,如果去掉一个
      

  6.   

    select uname from t1
    union
    select uname from t2
    union
    select union from t3union运算进行联合时会自动去掉重复行.
      

  7.   

    顶。在Sql里处理。。
    不取重复值。可以用EXISTS那个条件判断下在查询出来。
      

  8.   

    不能在SQL里判断,在DataSet里应该怎么做呢
      

  9.   

    大家帮帮忙啊,在DataSet里怎么去掉重复的数据啊
      

  10.   

    DataSet的绑定原来只是一个数据绑定,不可能智能的去掉重复数据
    LZ又说不能使用Sql判断,还请你教我
    继续学习
    select uname from t1
    union
    select uname from t2
    union
    select uname from t3
    联合查询后执行数据DataSet
      

  11.   

    我看dataSet里有一个Select()的方法,这个能不能去掉呢?
      

  12.   

      在 DataSet这端不好处理了..在网上查了一堆资料没有什么好办法..其他的条件约束还好处理...
    建议还是在数据库做下处理了...不过期待高手来解决....学习ing...
      

  13.   

      在 DataSet这端不好处理了..在网上查了一堆资料没有什么好办法..其他的条件约束还好处理...
    建议还是在数据库做下处理了...不过期待高手来解决....学习ing...
      

  14.   

      在 DataSet这端不好处理了..在网上查了一堆资料没有什么好办法..其他的条件约束还好处理...
    建议还是在数据库做下处理了...不过期待高手来解决....学习ing...
      

  15.   

      在 DataSet这端不好处理了..在网上查了一堆资料没有什么好办法..其他的条件约束还好处理...
    建议还是在数据库做下处理了...不过期待高手来解决....学习ing...
      

  16.   

      在 DataSet这端不好处理了..在网上查了一堆资料没有什么好办法..其他的条件约束还好处理...
    建议还是在数据库做下处理了...不过期待高手来解决....学习ing...
      

  17.   

    我比较苯的做法
    select uname from t1
    select uname from t2 where uname not in (select uname from t1)
    select uname from t3 where uname not in (select uname from t1) and uname not in (select uname from t2)
      

  18.   

    我看dataSet里有一个Select()的方法,这个能不能去掉呢?不行.
    datatable.select方法只能指定filter即过滤条件,而不能对 选择列 进行确定以下都是随手敲的,难免手误select id,name from tb where id>1
    即,select()方法只能指定 蓝色的部分,不能确定红色的部分.如果是在sql中,可以通过 where 后变通的方法来使 相同的name只取一个.
    比如,设id为identity列.select id,name from tb a where not exits(select 1 from tb where name=a.name and id<a.id) --name相同的取最小的id. 或取最大id将<改为>即可
    --或是
    select id,name from tb a where id in(select top 1 id from tb where name=a.name order by id)
    --或是
    select id,name from tb a where id=(select max(id) from tb where name=a.name)
    --或是
    select a.id,a.name from tb a inner join(select max(id) mi from tb group by name ) b where mi=id
    --或是
    select id,name from tb a where 1=(select count(1) from tb where name=a.name and id<a.id)而在 datatable.select方法中,如果按 1,2,3,这几种SQL语句的写法, datatable无法提供子查询中供比较的表
    所以是不行的.你如果非要去掉重复name,那么方法可以是:
    1,在填充datatable时,从数据库端直接取以下的行集
    select name from t1
    union select name  from t2
    union select name from t32,在将三个dt合并时,不使用merge方法, 而采用逐行importrow的方法.
    DataRow[] rows2 = dt2.Select();
    DataRow[] rows3 = dt3.Select();
    for(int i=0;i<rows2.length;i++)
    {
       //每个行逐列比较,你这里只比较name列,那么
       DataRow[] rows = dt.Select("name='" + rows2[i]["name"].ToString());
       if(rows.length=0) dt.ImportRow(rows2[i]);
    }for(int i=0;i<rows3.length;i++)
    {
       //每个行逐列比较,你这里只比较name列,那么
       DataRow[] rows = dt.Select("name='" + rows3[i]["name"].ToString());
       if(rows.length=0) dt.ImportRow(rows3[i]);
    }
      

  19.   

      DataRow[] rows2 = ds.Tables["rsdb"].Select();
      DataRow[] rows3 = ds.Tables["dldb"].Select();
       for (int i = 0; i < rows2.Length; i++)
        {
          //每个行逐列比较,你这里只比较name列,那么
          DataRow[] rows = ds.Tables["rsdb"].Select("TelNumber='" + rows2[i]["TelNumber"].ToString());
          if (rows.Length == 0) ds.Tables["jqw"].ImportRow(rows2[i]);
        }
    我这样写的,红色部分提示错误:表达式包含无效的字符串常量: '13591372298。
      

  20.   

    晕,代码里不能显示红色啊,呵呵
    DataRow[] rows = ds.Tables["rsdb"].Select("TelNumber='" + rows2[i]["TelNumber"].ToString());
    这行出错了。感谢这么多位高手的帮助,问题解决后,我会把贴子加分的
      

  21.   

    对不起,是我手误,忘加一个东西了.DataRow[] rows = dt.Select("name='" + rows2[i]["name"].ToString() + "'");后面要再加个'定界符.像我上面写的这样.
      

  22.   

    dt.Select(双引name=单引双引 + ... + 双引单引双引);
      

  23.   

    fcuandy 
    ==================
    不好意思,有些事情当误了,我试过了,可以去掉重复信息,但是有重复的就全给去掉了,比如
    我在A表里有:aaa
    B表里:bbb
    C表里:bbb
    按照你那个方法就只显示aaa了,我想显示的是aaa,bbb
      

  24.   

    按我那个写法,不出错的话,应该是显示的aaa,bbb
    你查一下语句,看哪里变量有没有写错.
      

  25.   

    Mark。简单问题 搞复杂了~
      

  26.   

    union 用起来速度会明显慢下来!