新人提问:我有三张表,多表连接查询之后有很多重复的字段,现在想请问一下,用distinct怎么去掉啊,select distinct* from Student  right join studenttoclass on student.student_id=studenttoclass.student_id right join class on class.class_id = Studenttoclass.class_id
这样写无效啊、各位教教我把

解决方案 »

  1.   

    SQL SELECT DISTINCT 语句
    在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词 DISTINCT 用于返回唯一不同的值。
      

  2.   

    distinct *
    是两条记录完全一样才是重复
    如果*中任何一个字段不同就算不同记录(即不重复记录)
    如果只是部分字段重复要求去重
    要看具体去重复的规则

    col qty
    A   2
    A   3
    A   1
    B   6
    --去掉col
    A   3
    B   6
      

  3.   

    这样一条都不会去掉,,, 
    distinct 对查询的所有列结果进行比较的
      

  4.   

    distinct后面选好什么东西不重复,比如distinct col1,col2,而不要distinct *,毕竟所有列都重复的记录很少
      

  5.   

    如还不能理解distinct 就把数据和想要的结果贴出来
      

  6.   

    table表字段1 字段2
    id name
    1 a
    2 b
    3 c
    4 c
    5 b库结构大概这样,这只是一个简单的例子,实际情况会复杂得多。比如我想用一条语句查询得到name不重复的所有数据,那就必须使用distinct去掉多余的重复记录。select distinct name from table
    得到的结果是: ---------- name
    ac好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧:select distinct name, id from table结果会是:---------- id name
    1 a
    2 b
    3 c
    4 c
    5 bdistinct怎么没起作用?作用是起了的,不过他同时作用了两个字段,也就是必须得id与name都相同的才会被排除我们再改改查询语句:select id, distinct name from table很遗憾,除了错误信息你什么也得不到,distinct必须放在开头。难到不能把distinct放到where条件里?能,照样报错。--------------------------------------------------------下面方法可行:select *, count(distinct name) from table group by name结果:id name count(distinct name)
    1 a 1
    2 b 1
    3 c 1最后一项是多余的,不用管就行了,目的达到group by 必须放在 order by 和 limit之前,不然会报错
    详细出处参考:http://www.jb51.net/article/24717.htm