请教一个SQL语句,有挑战,高手请进

shaowenfu22222 2003-09-12 03:25:53
在一个表中(ID:序号关键词,NAME:姓名域)如何找出所有NAME域相同的记录并存入另一表中。
我的思路是:依次读取每条记录->每个读取过程中查找该表NAME域与该记录相同的记录,若记录条数大于1则把该记录写入另一表中。
但怎样用语句实现呢?请赐教!
...全文
43 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
rijin 2003-09-16
  • 打赏
  • 举报
回复
SELECT ID,CLERK_NAME;
FROM a x;
WHERE name IN;
(SELECT name;
FROM a y;
GROUP BY name;
HAVING COUNT(*)>1);
INTO DBF b
w0017 2003-09-15
  • 打赏
  • 举报
回复
最近几乎天天用的语句。

精华?倒,呵呵。
jiaxingxing 2003-09-15
  • 打赏
  • 举报
回复
其实如果你找找以前的问题中是有这类问题的答案的
你的问题可以归述为:查找数据表的某一字段重复记录的问题,建议你用sql查询
这也是sql的精华之一。老多教材拿来做例子。
**********
select * from yourstable where name in (select name from yourstable group by name having count(*)>1)
dfwxj 2003-09-14
  • 打赏
  • 举报
回复
shaowenfu22222(swf) ( ) 信誉:100 2003-9-12 15:48:35 得分:0



多谢,就是请教vfp语句
能够再详细些吗?
旧表:a(ID,CLERK_NAME)
新表:b(ID,CLERK_NAME)
找出旧表中CLERK_NAME域有重复的记录放到新表中

*************************************

原来是这样啊,用下列代码搞定:
思路:先将a表去除重复记录查询到b表中,然后将只有一条记录的删除

sele * dist from a into dbf b
sele b
go top
scan
sele a
coun to aa for name==b.name
sele b
if aa=1
dele
endi
ends
pack
clos all
retu


cuc3com 2003-09-13
  • 打赏
  • 举报
回复
xuzuning(唠叨) 的查询改成
select id,name,count(*) as cnt from tab3 group by name HAVING count(*)>1
可以执行
dfwxj 2003-09-13
  • 打赏
  • 举报
回复
楼主有没有试过我的代码?
十月鹰飞 2003-09-13
  • 打赏
  • 举报
回复
楼主说明白一些,是不是一个name一个表呢,还是简单分一下组??
YuyuanJian 2003-09-12
  • 打赏
  • 举报
回复
ELECT CLERK_NAME,CNT(*) FROM a ;
INTO CURSOR C GROUP BY CLERK_NAME
SELECT ID,CLERK_NAME FROM A ;
WHERE CLERK_NAME IN (SELECT CLERK_NAME FROM C WHERE CNT > 1);
INTO TABLE b
xiolig 2003-09-12
  • 打赏
  • 举报
回复
你试过了吗?他的语句在VFP和SQL SERVER下都是无法执行的。
cuc3com 2003-09-12
  • 打赏
  • 举报
回复
我支持xuzuning(唠叨) 。
mygodsos 2003-09-12
  • 打赏
  • 举报
回复
如果新表b中没有,就insert,有重复的,就不加。
你再仔细看看,是全的
xiolig 2003-09-12
  • 打赏
  • 举报
回复
MagnetMoon 的方法会列出所有有重复的记录
shaowenfu22222 2003-09-12
  • 打赏
  • 举报
回复
谢!
天涯明月刀:你的方法是不是只能找出一个特定名字的记录吧,要找出所有的呀!
shaowenfu22222 2003-09-12
  • 打赏
  • 举报
回复
哈里路亚的方法光是能够找出不重复的吧
magnetmoon 2003-09-12
  • 打赏
  • 举报
回复
在一个表中(ID:序号关键词,NAME:姓名域)如何找出所有NAME域相同的记录并存入另一表中。
我的思路是:依次读取每条记录->每个读取过程中查找该表NAME域与该记录相同的记录,若记录条数大于1则把该记录写入另一表中。

select * from you_table ;
where name in (select name where you_table group by name having count(*)>1) ;
into table aaa ;
order by name

xiolig 2003-09-12
  • 打赏
  • 举报
回复
如果只是要筛去重复的记录,可用:
SELECT DISTINCT name FROM myTable ......
如果想把有重复记录的记录筛选出来,可用
SELECT name, COUNT(*) AS rec FROM myTable GROUP BY name Having rec>1 ...
总之,得根据具体的任务来决定。
mygodsos 2003-09-12
  • 打赏
  • 举报
回复
use a in 1
use b in 2
sele a
scan all
sele b
locate for b.clerk_name=a.clerk_name
if not(found())
insert into b(id,clerk_name) values (a.id,a.clerk_name)
endif
endscan

xuzuning 2003-09-12
  • 打赏
  • 举报
回复

select id,name,count(*) as cnt from tab3 group by name HAVING cnt>1
xuzuning 2003-09-12
  • 打赏
  • 举报
回复

select id,name,count(*) as cnt from tab3 group by name HAVING cnt>1
520zyb 2003-09-12
  • 打赏
  • 举报
回复
首先,你得给出你要找的NAME的值name1,然后,用它做条件再查找记录
SELECT USER
SCAN FOR NOT EOF()
IF NAME=name1
INSERT INTO TABLE1 VALUES(ID,NAME)
ENDIF
ENDSCAN
加载更多回复(4)

2,722

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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