假设表中有两个字段 id ,name,id 是主键
如何查询出name重复的所有行呢
例如
id, name
1 aa
2 bb
3 aa
4 cc
5 bb
6 dd需要返回1 aa
3 aa
2 bb
5 bb
===========================
方法之一是:
select a.id,a.name from tty1 a
left join tty1 b on a.name=b.name group by a.id,a.name
having count(b.id)>=2 order by a.name请帮我分解一下这个语句吧,最好用括号来把一部分一部分隔离出来,或者第一步先分解出什么来,第二步分解出什么来
这里,group by 是不是与having count相互配合的?
group by a.id, a.name是a left join b时用的,还是select ... from table时用的?
having count(b.id)是a left join b时用的,还是select ... from talbe时用的?
order by a.name呢?
谢谢
如何查询出name重复的所有行呢
例如
id, name
1 aa
2 bb
3 aa
4 cc
5 bb
6 dd需要返回1 aa
3 aa
2 bb
5 bb
===========================
方法之一是:
select a.id,a.name from tty1 a
left join tty1 b on a.name=b.name group by a.id,a.name
having count(b.id)>=2 order by a.name请帮我分解一下这个语句吧,最好用括号来把一部分一部分隔离出来,或者第一步先分解出什么来,第二步分解出什么来
这里,group by 是不是与having count相互配合的?
group by a.id, a.name是a left join b时用的,还是select ... from table时用的?
having count(b.id)是a left join b时用的,还是select ... from talbe时用的?
order by a.name呢?
谢谢
这里,group by 是不是与having count相互配合的?
是group by a.id, a.name是a left join b时用的,还是select ... from table时用的?
是select ... from table时用的having count(b.id)是a left join b时用的,还是select ... from talbe时用的?
是 left join b时用的select a.id,a.name from tty1 a
left join tty1 b on a.name=b.name
看看结果,另:是我的代码吧?
left join tty1 b on a.name=b.name 这是一个自连接查询,连接条件是NAME相同,如NAME相同的记录数大于2,则满足条件
from tty1 a left join tty1 b on a.name=b.name
group by a.id,a.name
having count(b.id)>=2
order by a.name
http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#select
13.2.7. SELECT语法如果您使用GROUP BY,则输出行根据GROUP BY列进行分类
SQL标准要求HAVING必须引用GROUP BY子句中的列或用于总计函数中的列。不过,MySQL支持对此工作性质的扩展,并允许HAVING因为SELECT清单中的列和外部子查询中的列。
from tty1 a left join tty1 b on a.name=b.name
group by a.id,a.name
having count(b.id)>=2
order by a.name
这里,生成了一个临时的表,tty1 a left join tty1 b on a.name=b.name,然后围绕这个临时的表进行select。而group by, having count, order by 都是在select操作基础上的,不知道理解得对不对?