select distinct A.id,A.time,A.Name,b.address from tablea as A,tableb as B where 
       ******** // 可消除重复
A.id=B.id

解决方案 »

  1.   

    谢谢楼上二位,
    不过很遗憾,distinct是删除重复纪录,而我现在是某一列是重复的,但纪录不是重复的,这是因为两个表有一对多的关系,所以用distinct是不行的。
      

  2.   

    没试过,不知道对不对,先试试~~(只是个思路)foreach( DataRow dr in dataSet.Tables[0].Rows )
    {
      String columnValue = dr[0][column].ToString(); // 取得重复的column
      int i = 1;
      foreach( DataRow dr2 in dataSet.Tables[0].Rows )
      {
         if( dr2[0][column].ToString() == columnValue ) // 删除重复的column
         {
              i++;
              if( i > 1 )
              {
                // 删除这个重复的column
              }
         }
       }
    }
      

  3.   

    在你不想重复的列前加distinct,没有问题呀!
      

  4.   

    to maotin(liu):
    你提供的思路,我很早就试过了,但是不知道什么原因,删不干净。
    下面是我的关键代码
    int k = dsTmp.Tables["tbV"].Rows.Count;
    string deleteString = string.Empty;
    char[] barr = {','};
    for (int i = 0,fi = 1;i < k-1;i++,fi++)
    {
    if (dsTmp.Tables["tbV"].Rows[i]["ID"].ToString() == dsTmp.Tables["tbV"].Rows[fi]["ID"].ToString())
    {
    deleteString += i + ",";
    }
    }
    if (deleteString.Length > 0)
    {
    deleteString = deleteString.Substring(0,deleteString.Length-1);
    string[] arr = deleteString.Split(barr);
    foreach(string n in arr)
    {
    int l = Convert.ToInt32(n);
    dsTmp.Tables["tbV"].Rows[l].Delete();
    }
    }
    请帮忙看看.
    to csdnshao(飞雪连天) :
    如果你说的是在sql语句中加distinct的话。
    建议你先去试一下distinct。
      

  5.   

    而我现在是某一列是重复的,但纪录不是重复的,select A.id,A.time,A.Name,b.address from tablea as A,tableb as B 
    你这不存在重复列啊搞不清楚你的问题,问的有点怪
      

  6.   

    To  lansluo(最后一个女巫):
      你可以先试试我得再说,不会有删不干净的。注意一下i。可以设个断点看看~~
      

  7.   

    不好意思应该是 :dr[column]
      

  8.   

    我没有把我的sql语句全部铁上来。
    打个比方说就是一个A.Name可以有好几个b.address
    我现在只要取最后一个b.adress(假设他们用Name来关联)
    这样就会有好几条记录了,而记录是不重复的,但是对于A.Name来说,却是重复的。
    明白我的意思吗?
    id            time          name        address
    1             1888-02-02       a          b
    1             1888-02-02       a          c
    2             1999-02-02       t          f
    记录没有重复的,但是前两条记录在前面的字段是重复的。 Do you understand?
      

  9.   

    试试这个
    string s = "select A.id,A.time,A.Name,b.address from tablea as A,tableb as B where A.id=B.id order by a.id asc";//表a何表b是一对多的关系。string strID="";
    foreach( DataRow dr in dataSet.Tables[0].Rows )
    {
       if(strID!=dr[0][column].ToString()); // 取得重复的column
       {
          //显示数据
          strID=dr[0][column].ToString();
       }
       else
       {
          // 删除这个重复的column
       }
    }
      

  10.   

    试试看这样行不行:DataView dv = new DataView(ds.Tables[0]);
    int count = dv.Count;
    for ( int i=0; i < count; i++ ) 
    {
    DataRow dr;
    dr = dv[i];
    //假设第3列为重复列,Temp为第三列的名
    string Temp = dr.ItemArray[2].ToString();
    dv.RowFilter = "Temp='" + Temp + "'";
    if ( dv.Count > 1)
    dv.Delete( 0 );
    dv.RowFilter = "";
    }
      

  11.   

    foreach( DataRow dr in dataSet.Tables[0].Rows )
    {
      String columnValue = dr["id"].ToString(); // 取得id的值
      int i = 1;
      foreach( DataRow dr2 in dataSet.Tables[0].Rows ) // 在dataset里在一次遍历
      {
         if( dr2[“id”].ToString() == columnValue ) // 如果id相等
         {
              i++;          // 第一个保留
              if( i > 1 )   // 删除重复的
              {
                // 删除这个重复的column
              }
         }
       }
    }
      

  12.   

    to maotin(liu):
    我试了一下你的方法:
    foreach( DataRow dr in dsTmp.Tables["tbV"].Rows )
    {
       String columnValue = dr["ClientName"].ToString(); // 取得重复的column
       int i = 1;
       foreach( DataRow dr2 in dsTmp.Tables["tbV"].Rows )
       {
        if( dr2["ClientName"].ToString() == columnValue ) // 删除重复的column
         {
    i++;
    if( i > 1 )
    {
       // 删除这个重复的column
      dr2.Delete();
    }
         }
      }
    }
    报错位:不能通过已删除的行访问该行的信息。
      if( dr2["ClientName"].ToString() == columnValue ) // 删除重复的column
      

  13.   

    倒,按照你上面说的,做个分组不就可以了吗?
    select * from TbName GROUP BY name,address
      

  14.   

    to  gOODiDEA(无语):
    如果用你的方法,在不知道那一列是重复列的情况下,如何执行。我现在的问题,就是在取出重复列的时候不能全取出来,总要漏掉一些。
    而且,很奇怪,在纪录数为各位数的时候,基本上不会漏掉,
    但纪录一多,两位数的时候就开始漏。
      

  15.   

    to glboy(星毅):请原谅小弟很菜,能说的详细点吗?
      

  16.   

    我只能说你的表设计的有问题
    可以试试group by
      

  17.   

    没有非常认真的看你刚才的回复,前面回复不对,我以为你是要求name,address不重复
    引“打个比方说就是一个A.Name可以有好几个b.address
    我现在只要取最后一个b.adress(假设他们用Name来关联)
    这样就会有好几条记录了,而记录是不重复的,但是对于A.Name来说,却是重复的。”:要允许一定的数据冗余,你应该这么来看待,记录是不重复的,某几列的记录中其中的一列有重复这是很正常的,作为一对多关系肯定会存在这样的情况,而不是什么数据冗余问题
    不明白你为什么一定要做这个删除?
      

  18.   

    这样可以了,我试过了。~~
    int j = dataSet.Tables[0].Rows.Count;
    for( int i = 0; i < j; i++ )
    {
      string testValue = dataSet.Tables[0].Rows[i]["name"].ToString();
      int m = 0;
      foreach( DataRow dr2 in dataSet.Tables[0].Rows )
      {
        String test1 = dr2["name"].ToString();
       if( dr2[1].ToString() == testValue ) 
       {
          m++;         
          if( m > 1 )  
          {
    dr2.Delete();
    j--;
    continue;
           }
        }
      }
    dataSet.AcceptChanges();
    }
      

  19.   

    to maotin:我试试。
    另外,对上面说我表设计不合理的同志:
    感谢各位的热心看帖,不过风凉话就不必说了。我之所以要删出,是因为客户要求对多个表查询在一个datagrid显示,但在某种情况下不允许某个表有重复纪录,同时因为我这个页面需要打印,所以只能在ds中修改。
      

  20.   

    to maotin:
    dr2[1]值得是什么意思?
      

  21.   

    呵呵,没改过来,应该是dr2["name"]
      

  22.   

    String test1 = dr2["name"].ToString();这一句也不须要,这只是我测试时用到的
      

  23.   

    那直接用if (test1 == testvalue不久可以了?
      

  24.   

    好了
    感谢各位的帮忙。尤其是maotin。
    马上揭帖