如何用sql 语句查找一个表里的两个字段重复的记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用sql 语句查找一个表里的两个字段重复的记录相关的知识,希望对你有一定的参考价值。

表名为gl_accass 现在需要查找出citem_id和me字段在这个表里的重复值并列出来,前提是ccode等于1403 iperiod等于2。比方说在gl_accass表中ccode字段为1403, iperiod字段为2 citem_id有两行为001 对应的me字段的两行也是重复值,就查询出来。。不大懂SQL,表达的也不是多清除,QQ314363217 如能解决另加100分。万分感谢了。

select citem_id, me from gl_accass
where ccode=1403 and iperiod = 2
group by citem_id, me
having count(*) > 1
这个是仅仅把ccode和me列出来,不知道你是否需要把这条记录也列出来
如果要把 i_id连同这行记录列出的,用下面这个SQL
select * from gl_accass ,
( select citem_id, me from gl_accass
where ccode=1403 and iperiod = 2
group by citem_id, me
having count(*) > 1) t2
where gl_accass.citem_id = t2.citem_id and gl_accass.me = t2.me

如果你的ccode字段和me字段是字符型的,请把 =1403 和 =2 写成 ='1403' 和 ='2'追问

上面的sql测试正确,下面的执行后iperiod这个字段把为1的也显示了。我需要的就是在第一个语句的基础上再显示出来对应的 i_id就可以了。麻烦你再给写个吧,分一定给你。多谢了

追答

哦,那就把还有两个条件也加上

select * from gl_accass ,
( select citem_id, me from gl_accass
where ccode=1403 and iperiod = 2
group by citem_id, me
having count(*) > 1) t2
where gl_accass.citem_id = t2.citem_id and gl_accass.me = t2.me
and ccode=1403 and iperiod = 2

参考技术A 若是只把相同记录查出来,sql语句如下(ccode、iperiod当成了int进行处理):
select citem_id,me
from gl_accass
where ccode=1403 and iperiod=2
order by citem_id,me
若是要查出相同记录数:
select citem_id,count(citem_id) numberofcitem_id,me,count(me) numberof(me)
from gl_accass
where ccode=1403 and iperiod=2
group by citem_id,me
order by citem_id,me
参考技术B 你的表述也不是太清楚,最好举个例子

select a.* from table_name a ,table_name b where a.column_name = b.column_name;追问

已经补充问题,望解答

sql语言如何查询一条记录中含有两个关键字?

sql语言如何查询一条记录中含有两个关键字?例如列表中有Station1...Station10个字段名,如何设置查询,检索出其中含有“上海”“北京”两个关键字的记录?
感谢各位,我表述详细点吧,这就是查找两个地点是否是在一条线路上的语句,当这条线路经过的站点包含着两个地点时,就把它检索出来,请问改用什么语句比较好。

参考技术A select ID from (select ID, station1||station2||....||station10 as col1 from tabname) where col1 like '%上海%' or col1 like '%北京%' 参考技术B select ID from (select ID, station1||station2||....||station10 as col1 from tabname) where col1 like '%上海%' or col1 like '%北京%'追问

这样当Station更多时会不会影响执行效率啊?

追答

嗯,肯定的~ 没索引,又是||,又是%……

追问

哦,谢谢

追答

考虑效率的话,多加一列“线路”然后来个索引?
最好城市用简写或者编号比如 bj sh 或者 a b c 可以缩短该列的平均长度。

追问

麻烦能否写下语句呢?

追答

加一列是说改表结构~~ 举个例子哈,你原来的表结构是这样的~

列名 id , .... , station1, station2, .... station10
值 1 .... , 北京, 上海, .... 广州

修改后表结构是这样的

列名 id , .... , station1, station2, .... station10, Line
值 1 .... , 北京, 上海, .... 广州, bj-sh-...-gz

总之,新列越短约好,并在Line上建索引。

本回答被提问者采纳
参考技术C 把这几个字段拼接一下 然后再用 (拼接字段 like’%关键字1%‘ and 拼接字段 like’%关键字2%‘ )查询追问

谢谢回答,但是字段名较少时这个方法可以,当字段名较多时用起来会比较繁琐,有没有更简洁的办法?

追答

好像只能用拼接来做,如果你数据多的话,可以写个函数来帮你自动拼接

参考技术D 你有主键吧,给你个思路

select a.* from
[Temp].[dbo].[test] as a
inner join (
SELECT id, ([stat1] +[stat2] +[stat3] +[stat4]) as com FROM [Temp].[dbo].[test]
) as b on a.id = b.id
where b.com like '%a%' and b.com like '%b%'追问

你好,我表述详细点吧,这就是查找两个地点是否是在一条线路上的语句,当这条线路经过的站点包含着两个地点时,就把它检索出来,请问改用什么语句比较好。

追答

你看看这个函数 CONCAT

另外,你这个表定型了么
如果没有的话,可以重新设计下
做个站点的表,站点ID 加 站名
线路表,线路ID 加 站点ID
这样就舒服了

以上是关于如何用sql 语句查找一个表里的两个字段重复的记录的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库中如何用sql语句查出重复字段以及如何删除?

如何用sql语句为ac数据库增加多个字段!

MySql根据字段名查询重复记录并删除!只保留一条

SQL查找某一字段相同,某一字段不同的数据

如何用SQL语句得到简单的移动平均值?

如何用sql语句筛选时间最新的数据