distinct 多字段的问题

yeyuxuan2006 2008-02-03 05:11:01
select distinct ID,AA,BB from tName

select distinct ID from tName
有什么区别??
第一种情况,distinct会不会影响AA,或者BB字段??
...全文
43356 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
技术传播 2010-03-24
  • 打赏
  • 举报
回复
测试的表语句:

CREATE TABLE `a` (

`a` char(50) default NULL,

`b` char(50) default NULL,

`c` char(50) default NULL

)

现在我插入以下几条语句:

mysql> insert into a values('a','b','c'),('a','b','c'),('a','b','d'),('a','d','c'),('a','e','f'),('a','b','e');



现在来查询:

mysql> select * from a;

+------+------+------+

| a | b | c |

+------+------+------+

| a | b | c |

| a | b | c |

| a | b | d |

| a | d | c |

| a | e | f |

| a | b | e |

+------+------+------+

来看:

select distinct a from a; 返回 a

PS:这种情况是以列a为单位进行去掉重复列字段的



mysql> select distinct a,b from a;

+------+------+

| a | b |

+------+------+

| a | b |

| a | d |

| a | e |

+------+------+

PS:这种写法即distinct后面如果有两个列的话就表示 :这两个列同时不重复的

A b

A d

A e

就这三条 两个同时不重复的了!

mysql> select distinct a,b,c from a;

+------+------+------+

| a | b | c |

+------+------+------+

| a | b | c |

| a | b | d |

| a | d | c |

| a | e | f |

| a | b | e |

+------+------+------+

三个同时不重复的有五条记录。



结论:distinct后面跟的字段表示 作为一个整体来考虑是否重复如果有重复则踢除掉!
magicstone_bupt 2009-05-12
  • 打赏
  • 举报
回复
长见识了。
cat_hsfz 2008-02-07
  • 打赏
  • 举报
回复
distinct可以认为是select完后才进行的,所有SELECT DISTINCT a, b, c FROM t,相当于SELECT a,b,c FROM t之后再对所有列DISTINCT。
lishijie910123 2008-02-04
  • 打赏
  • 举报
回复
确实啊,
楼上的都讲完了
amandag 2008-02-04
  • 打赏
  • 举报
回复
来的太晚..
极地_雪狼 2008-02-04
  • 打赏
  • 举报
回复
楼上的都把风头抢了。我无语
skyzero110 2008-02-04
  • 打赏
  • 举报
回复
嗯 一个是3个 1个是1个
不过微软建议只用1列 大多用在聚合函数里 不然有时出问题
underwater 2008-02-04
  • 打赏
  • 举报
回复
简单点, distinct 修饰是针对行,不要误以为是首字段就可以了。
lnwuyaowei 2008-02-04
  • 打赏
  • 举报
回复
都说全了,接分。
lovehongyun 2008-02-04
  • 打赏
  • 举报
回复
前者是针对三个.

后者是针对一个
一品梅 2008-02-03
  • 打赏
  • 举报
回复
学习...
fcuandy 2008-02-03
  • 打赏
  • 举报
回复
distinct a,b,c
是针对 a,b,c的组合来distinct的. 而不是对a distinct 而对b,c,不distinct

即选数据效果上:
相当于 group by a,b,c
而不是 group by a
岸芷汀蓝 2008-02-03
  • 打赏
  • 举报
回复
前一种是三个都相同才合并
wdx2008 2008-02-03
  • 打赏
  • 举报
回复
distinct一般需要处理单一字段时使用,不能用于多个字段
否则得到的结果可能不是你需要的
cybonline 2008-02-03
  • 打赏
  • 举报
回复
会的,第一种情况是把三个字段的内容都相同的记录认为是相同的记录,合并一条,如果有一个字段是不同的,认为不是相同,不合并
xiaoqhuang 2008-02-03
  • 打赏
  • 举报
回复
select distinct ID,AA,BB from tName
查找ID+AA+BB列都不重复的。
select distinct ID from tName
查找ID列不重复的。

第一种情况,distinct会不会影响AA,或者BB字段??

会的

1,'a','a'
1,'a','b'
1,'a','b'
select distinct ID,AA,BB from tName
只返回上面2列
libirds 2008-02-03
  • 打赏
  • 举报
回复
有区别,前面的会选择唯一的一行。后面的选择唯一列。
前一种只要三个字段都不重复就取出来。后面只取唯一的ID;
会影响AA或BB的取值。

62,077

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧