表的结构如下:
ID     ColumnID   Title
1        2        新闻1
2        2        新闻2
3        4        新闻3
4        1        新闻4
5        1        新闻5怎么列出这个表的ID、ColumnID、Title三个字段的数据,并且ColumnID中没有重复的数据?

解决方案 »

  1.   

    SELECT DISTINCT * FROM TAB
      

  2.   

    select disticnt ColumnID ,ID ,Title from table
      

  3.   

    select a.id,a.columnid,a.title from table a,(select distinct columnid,id from table where id=max(id)) b where a.id=b.id and a.columnid=b.columnid
      

  4.   

    如果想要显示第二列中唯一的值,那么第二列就要在多个不同值中取其中一个,通过一个语句是不能实现的,一楼跟二楼的语句肯定会将记录全部选出来,因为第三列的值不同当然,如果不是一条语句,可以设置一些规则,比如只显示相同ColumnID的第一条记录的值,然后分两步来实现或者再加一字段,标志显示与否
      

  5.   

    用 in 或 Exits了select disticnt ColumnID ,ID ,Title from table Where ColumnId  in( Count(Id) as RecCount,ColumnId From table Group By ColumnId having RecCount=1) 
    语法可能有点错误,但大致就是这个意思了,另外,其实应该使用exits语句的,因为exits语句据说效率比较高
      

  6.   

    select a.id,a.columnid,a.title from table a,(select distinct columnid,id from table where id=max(id)) b where a.id=b.id and a.columnid=b.columnid
    ---------------------------------------------------------
    这段中where id=max(id)会有错误提示:聚合不应出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。还可以用什么方法?
      

  7.   

    select max(id) as ID,ColumnID ,TITLE from TABLE group by ColumnID ORDER BY ID
      

  8.   

    select max(id) as ID,ColumnID ,TITLE from TABLE group by ColumnID ,TITLE ORDER BY ID
      

  9.   

    先用SELECT DISTINCT ColumnID FROM TableTest 查出表的单个ColumnID将它仍到另一个表里,接着再用另一个表和原表做联合查询(....join.... on....where 原表.ColumnID=新表.ColumnID)你试下行不行
      

  10.   

    试了:
    SELECT a.NewsID, a.ColumnID, a.indexTitle,b.columnid
    FROM  News_News as a
    INNER JOIN (select distinct columnid from News_News)as b
    on b.columnid=a.columnid还是出现和 SELECT a.NewsID, a.ColumnID, a.indexTitle,b.columnid FROM  News_News 一样的结果。
      

  11.   

    select id,ColumnID,title from table 
    where id in
    (
    select max(id) from table where ColumnID in 
     (
     select ColumnID from table group by ColumnID having count(*) >1
     )
    group by ColumnID,id
    )
    union
    select id,ColumnID,title from table 
    where id in
    (
    select id from table where ColumnID 
     (
     select ColumnID from table group by ColumnID having count(*) =1
     )
    )
    ------------有点啰嗦,估计没问题
      

  12.   

    SELECT ID、ColumnID、Title FROM TABLE WHERE ID IN(SELECT MAX(ID) FROM TABLE GROUP BY ColumnID)
      

  13.   

    To  cen123(创造者) 
    呵呵,猛男啊~~~我怎么想不到这么分哈~~简简单单一条语句搞定~
      

  14.   

    同志们,你们给人家出主意是好的,但是应该稍微敬业的测试一下吧?这样才有助于提高我们论坛的质量阿。
    一楼、二楼语句肯定是不起作用;
    swordragon(古道热肠)兄的在where子句里使用聚合函数,不用测试就知道肯定有语法错误
    只有cen123(创造者)兄的能正常工作,但结果只是硬性删除了ID为1和4的值(因为ID为1、4时ColunmID都与2、5的重复);
     happyfamily(FreeHorse)兄的只少了一个关键字in就可以工作了,可是结果实际上等价于Select * from table;
    我想搂主的本意不应该是想丢掉表中的信息吧,这个问题通过一张数据表从逻辑上讲就是不可实现的,否则一定会丢失记录。因为从本质讲,ColumnID虽然不同,但他们依旧代表着不同的记录!比如ColunmID为2对应着两条不同的新闻,我们怎么做到在一张数据表中只选出一个ColunmID为2的值呢?如果强行那样,就象cen123兄的办法,那就一定会丢掉新闻1和新闻4,或者新闻2和新闻5!