是不是可以这样写: sql.........where........group by name having count(*)>1 如果上面的可以,那还有一个问题,如: A表 id name kemu1 kemu2 kemu3 1 张龙 珠心算 启蒙班 预备上 2 张龙 珠心算 启蒙班 预备下如果是上表这样的,在搜索时,则不显示张龙,因为上表的张龙都是同一个科目珠心算,不属于多科。所以这样的条件又应该怎么写?
drop table A;create table A ( id int, name varchar(10), kemu1 varchar(10) ) charset=gbk;set names gbk;insert into A values (1, '张龙', '珠心算'), (2, '张龙', '口才'), (3, '赵虎', '珠心算'), (4, '赵虎', '作文'), (5, '王朝', '数学'), (6, '王朝', '数学'), (7, '马汉', '绘画');select DISTINCT A.name from A, (select name, group_concat(kemu1 order by kemu1) as klist from A group by name HAVING count(DISTINCT kemu1)>1) B where find_in_set(A.kemu1, B.klist)name 张龙 赵虎
最后一句应改为select name from (select name, group_concat(kemu1 order by kemu1) as klist from A group by name HAVING count(DISTINCT kemu1)>1) A group by klist HAVING count(*)=1
select * from Table where username = '张' select * from Table where username = '王'分开写啊,也就两个sql语句,干嘛要那么复杂
select name,count(*) from A group by name having count(*)> 1
group by Name having count(*) > 1
select * from name group by name having count(*)>1
楼主的意思是按人名搜寻,找出记录大于1的用户列表。 select name from table group by name having count(*)>1
有没有这种写法,select name from table group by name,kemu1 having count(*)>1
那不就是 name 王朝 你要这个?我 #11 不是已经给你了吗?
SELECT name FROM t_xuanke WHERE id in( SELECT id FROM t_xuanke GROUP BY name,kemu1 HAVING count(*)<=1 ) GROUP BY `name` HAVING COUNT(*)>11.先去掉相同名字,科目1也相同的记录 2.找出多个name的记录lz,你这张表原本是想储存学生的选课情况,用“建对值”的设计是好的,为何后面会延伸那么多科目呢?很多复杂低效率的sql就是从不合理的表设计开始的!
select name from table表 GROUP BY name HAVING count(id)>1
<input name="dk" id="dk" value="1" type="checkbox" {if $dk gt '0'}checked="checked"{/if} /> 多科
<input name="sou" type="submit" class="ann10" value="搜索" />
</form>
sql........where count(name)>1
sql.........where........group by name having count(*)>1
如果上面的可以,那还有一个问题,如:
A表
id name kemu1 kemu2 kemu3
1 张龙 珠心算 启蒙班 预备上
2 张龙 珠心算 启蒙班 预备下如果是上表这样的,在搜索时,则不显示张龙,因为上表的张龙都是同一个科目珠心算,不属于多科。所以这样的条件又应该怎么写?
A表
id name kemu1 kemu2 kemu3
1 张龙 珠心算 启蒙班 预备上
2 张龙 口才 A级 朗诵
3 赵虎 珠心算 启蒙班 预备上
4 赵虎 作文 一年级
5 王朝 数学 一年级
6 王朝 数学 二年级
7 马汉 绘画 魔法师我想做一个按纽,点击这个按纽就搜索出张龙、赵虎
1 张龙
2 赵虎
id int,
name varchar(10),
kemu1 varchar(10)
) charset=gbk;set names gbk;insert into A values
(1, '张龙', '珠心算'),
(2, '张龙', '口才'),
(3, '赵虎', '珠心算'),
(4, '赵虎', '作文'),
(5, '王朝', '数学'),
(6, '王朝', '数学'),
(7, '马汉', '绘画');select DISTINCT A.name
from A,
(select name, group_concat(kemu1 order by kemu1) as klist from A group by name HAVING count(DISTINCT kemu1)>1) B
where find_in_set(A.kemu1, B.klist)name
张龙
赵虎
from
(select name, group_concat(kemu1 order by kemu1) as klist from A group by name HAVING count(DISTINCT kemu1)>1) A
group by klist
HAVING count(*)=1
select * from Table where username = '王'分开写啊,也就两个sql语句,干嘛要那么复杂
group by name
having count(*)>1
select name from table group by name having count(*)>1
有没有这种写法,select name from table group by name,kemu1 having count(*)>1
name
王朝 你要这个?我 #11 不是已经给你了吗?
SELECT name FROM t_xuanke
WHERE id in( SELECT id FROM t_xuanke GROUP BY name,kemu1 HAVING count(*)<=1 )
GROUP BY `name`
HAVING COUNT(*)>11.先去掉相同名字,科目1也相同的记录
2.找出多个name的记录lz,你这张表原本是想储存学生的选课情况,用“建对值”的设计是好的,为何后面会延伸那么多科目呢?很多复杂低效率的sql就是从不合理的表设计开始的!
A表
id name banji_id
1 张龙 1
2 张龙 2
3 赵虎 3
4 赵虎 4
5 王朝 5
6 王朝 6
7 马汉 7B表
banji_id kemu1 kemu2 kemu3
1 珠心算 启蒙班 预备上
2 口才 A级 朗诵
3 珠心算 启蒙班 预备上
4 作文 一年级
5 数学 一年级
6 数学 二年级
7 绘画 魔法师如果是这种结构应该怎么样写?
A表
id name banji_id
1 张龙 1
2 张龙 2
3 赵虎 3
4 赵虎 4
5 王朝 5
6 王朝 6
7 马汉 7B表
banji_id kemu1 kemu2 kemu3
1 珠心算 启蒙班 预备上
2 口才 A级 朗诵
3 珠心算 启蒙班 预备上
4 作文 一年级
5 数学 一年级
6 数学 二年级
7 绘画 魔法师想要这种显示结果应该怎么样写?
1 张龙 珠心算
2 张龙 口才
3 赵虎 珠心算
4 赵虎 作文