SQL查询数据库中完全相同的两条数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL查询数据库中完全相同的两条数据相关的知识,希望对你有一定的参考价值。

参考技术A select f1,f2,...,fn
from table
group by f1,f2,...,fn
having count(1)>1 查出存在相同的f1,f2,..,fn
想查找出记录则
select t1.* from table t1
join (select f1,f2,...,fn from table group by f1,f2,...,fn having count(1)>1) t2
on t1.f1=t2.f1 and t1.f2=t2.f2 and ... and t1.fn=t2.fn
结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。
1986年10月,美国国家标准协会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言(ANSI X3. 135-1986),1987年得到国际标准组织的支持下成为国际标准。不过各种通行的数据库系统在其实践过程中都对SQL规范作了某些编改和扩充。所以,实际上不同数据库系统之间的SQL不能完全相互通用。

一起去大厂系列针对left join以及limit的两条优化小技巧

记两则亲身经历的sql优化技巧:

一、主表数据不到100万,以下查询结果集约200左右,第一条sql执行效率为40ms,第二条为200ms,使用上面方法,其效率明显优于left join:

sql1:

SELECT SQL_NO_CACHE 
	usersr_id 
	,businessunit_id
	,ifnull((SELECT name FROM sync_businessunit WHERE id= obj.businessunit_id),'无名' ) businessunit_name
	,ifnull((SELECT fullname FROM sync_usersys WHERE id= obj.usersr_id),'无名' ) sr_name
	,SUM(price) price
	,IFNULL((SELECT target FROM analysis_target WHERE year=2017 and month=4 and usersr_id = obj.usersr_id  ),0) target
FROM analysis_cusorder	obj
WHERE send_time >= '2017-02-01' AND send_time < '2017-03-01' #BETWEEN '2017-02-01' and '2017-02-28' 
GROUP BY usersr_id 
ORDER BY usersr_id;

sql2:

SELECT SQL_NO_CACHE 
	o.usersr_id,
  o.businessunit_id,
  u.`name` as businessunit_name,
  us.fullname,
  t.target as zongzhibiao,
	SUM(o.price) as zongdacheng
FROM analysis_cusorder o
LEFT JOIN analysis_target t ON o.usersr_id = t.usersr_id and t.`year`=2017 and t.`month` = 4
LEFT JOIN sync_businessunit u ON o.businessunit_id = u.id
LEFT JOIN sync_usersys us ON o.usersr_id = us.id 
WHERE o.send_time BETWEEN '2017-02-01' and '2017-02-28' GROUP BY o.usersr_id;

二、为针对limit的优化,一般表数据超过1000万,limit基本就废了,需采用sql1的方法进行优化,效率相关极为明显,以下语句为使用php框架后的写法:

sql1:

$query = $this->db->select('id,third_id,recommend_menus')->
where("id > $maxid and recommend_menus != ''")->
order_by("id asc")->
limit($perpage)->
get('crawler_merchant');

sql2:

$query = $this->db->select('id,third_id,recommend_menus')->
limit($perpage, $offset)->
get('crawler_merchant');

以上是关于SQL查询数据库中完全相同的两条数据的主要内容,如果未能解决你的问题,请参考以下文章

怎样用Sql语句判断一张表中的两条数据相同

mysql如何查询一个字段里面相同的两条数据。如库名为s,表名为task,字段名为rank。请写一段这样的sql语句

sql怎么过滤两条完全相同的数据,就是两条相同的数据只显示一条,麻烦哪位帮忙解答一下,谢谢!

SQL 如何将一个表中的两条或多条拥有相同ID的记录合并为一条?

sql查询:使用内连接查询两张表的时候,如果左边表的一条记录对应了右边表的两条记录,结果显示排列问题

sql查询两个字段相同的记录