表tz是主表,用来记录帖子。id字段既是主键也是标识,title是标题;
表cmt是从表,用来记录帖子的评论,字段如下:
id tieziID content uid time(id主键标识、tieziID从属帖子、内容、用户ID、时间)
现在,要在个人中心页面建立一个功能,让用户查看自己评论了哪些帖子
我的SQL语句如下:
string sql="";
sql="select tz.id,tz.title from tz,cmt where cmt.uid='"+当前用户ID+"'" and cmt.tieziID=tz.id;
因为用户可以给同一篇帖子多次回贴,这样查出来的记录就有重复,比如张三给ID编号为100的帖子回复了5次,那么查出来的评论,专是ID为100的帖子,就显示了5行,请问各位大侠,怎么避免重复的记录呢?SQL语句能实现吗?
谢谢!

解决方案 »

  1.   

    使用 union 语句SQL UNION 操作符
    UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。SQL UNION 语法
    SELECT column_name(s) FROM table_name1
    UNION
    SELECT column_name(s) FROM table_name2
    注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。SQL UNION ALL 语法
    SELECT column_name(s) FROM table_name1
    UNION ALL
    SELECT column_name(s) FROM table_name2
    另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。http://www.w3school.com.cn/sql/sql_union.asp
      

  2.   

    tz.id,tz.title必须能保证这两个列的值是完全相同的 否则会有错误
    如果是单列的话可以用DISTINCT
    多列的情况 可以多次查询处理 或者单独写存储过程
      

  3.   

    SELECT DISTINCT A.ID FROM TZ A INNER JOIN CMT B ON A.ID=B.TIEZIID
      

  4.   

    select distinct  列名,...... from 表
      

  5.   

    DISTINCT 关键字消除重复的东东
      

  6.   

    select Distinct tz.id,tz.title from tz,cmt where cmt.uid='"+当前用户ID+"'" and cmt.tieziID=tz.id And tz.id=cmt.tieziid
      

  7.   

    select id,title from tz where id in(
      select distinct tieziID from cmt where uid='"+当前用户ID+"'"
    )效率应该会有大的提升另外,个人建议你的数据库设计不很合理,主表中为什么不缓存一个回复者的ID呢?这样处理起来是不是更方便?