当前位置: 首页 > wzjs >正文

金华建设局网站做网站 前端

金华建设局网站,做网站 前端,微信公众号怎么做广告推广,做图书网站的代码left join 应该是最常用的一个连接,但是有时候left join也不能包打天下。因为left join是一个获取笛卡尔积的临时表,如果这些的表都是一对一的关系,怎么join都没事。但是实际上我们会遇到很多一对多的对应情况,就需要按照实际情况…

left join 应该是最常用的一个连接,但是有时候left join也不能包打天下。因为left join是一个获取笛卡尔积的临时表,如果这些的表都是一对一的关系,怎么join都没事。但是实际上我们会遇到很多一对多的对应情况,就需要按照实际情况来判断。

举个例子,表A和表B的关联的关系是一对多的,表A和表C也是一对多的情况,这里A和B,C的关系是关联起来一对多,也有A和B,C关联不上得情况。

CREATE TABLE `A` (`id` int(11) NOT NULL,`b_id` int(11) DEFAULT NULL,`c_id` int(11) DEFAULT NULL,PRIMARY KEY (`id`),
) ENGINE=InnoDB;CREATE TABLE `B` (`id` int(11) NOT NULL,`a_id` int(11) DEFAULT NULL,`b_count` int(11) DEFAULT NULL,`b_staus` int(11) DEFAULT NULL,PRIMARY KEY (`id`),
) ENGINE=InnoDB;CREATE TABLE `C` (`id` int(11) NOT NULL,`a_id` int(11) DEFAULT NULL,`c_count` int(11) DEFAULT NULL,`c_staus` int(11) DEFAULT NULL,PRIMARY KEY (`id`),
) ENGINE=InnoDB;

我们这边通过统计数量,b_staus为1取关联B的b_count,c_staus为2时取关联C的c_count。

如果我们用左连接这两张表,因为笛卡尔积会导致结果集的数目会“膨胀”导致结果不对。

——A——   ——B——  ——C——
a    *    b   *   c

我们要的结果应该是(ab)+(ac),而左连接解决不了甚至这种abc结合聚合函数会出现某些聚合的函数重复计算的情况,怎么解决这种情况,UNION ALL

一 UNION ALL

如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。union(或称为联合)的作用是将多个结果合并在一起显示出来。

(union/union 是一个"胶水"把两个select结果集“粘”在一起,就如同上边(ab)+(ac),把(ab)和(ac)结合在一起。)

这里要注意:
(1)Union因为要进行重复值扫描,所以效率低。如果合并没有刻意要删除重复行,那么就使用Union All

(2)两个要联合的SQL语句 字段个数必须一样,而且字段类型要“相容”(一致);

1.1 UNION ALL和 UNION以及一些别的区别

Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;

Union All:对两个结果集进行并集操作,包括重复行,不进行排序;

Intersect:对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;

Minus:对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。

这里最常用的还是union all,因为别的会做一些去重,排序的小动作,所以常用的结果集不需要,即使要去重也可以根据where的约束条件,或者group by分组的情况下可以搭配其他聚合函数或者having来过滤条件。

二 UNION ALL的使用情况和LEFT JOIN的对比

有一句话其实挺形象的:
union为增加行;left join为增加列

我们可以比喻一下,使用UNION ALL的场景是我们想分部分“叠”在一起,类似下面这种情况:

A
B
C

LEFT JOIN 是两个表A需要关联B表,把B表的一些字段展示出来。

A                      B
a1 a2 a3 a4     b1  b2  b3  a1

三 UNION ALL和LEFT JOIN与GROUP BY分组聚合函数的结合需要注意的点

3.1 GROUP BY ,HAVING和聚合函数

分组group by分组经常用的,与他搭配的好搭档一个是过滤条件having,另一个是聚合函数。

group a.id
having count > 0

having是填补group by没办法后面添加where条件,通过having可以填补这个,把这个分组结果集进行过滤。

聚合函数常见的有SUM,COUNT ,AVG,MAX,MIN (实际上还有一些冷门的聚合函数VAR,VARP,STDEV ,STDEVP GROUPING,CHECKSUM等,但是一般即使算方差,标准差的也不一定用这些函数,不如导出去直接处理结果。)

3.2 分组与UNION ALL和LEFT JOIN的搭配要点。

这里union all与分组聚合函数尤其注意,一般来说group by放在union all结果集的后面,聚合函数也要注意情况不要轻易放在里面会导致因为聚合函数,行数变少的情况。

这里有一个union all的例子:

SELECTout_count AS count,(out_count - SUM( back_detail_count )) AS could_back_count,SUM( back_detail_count ) back_count,a.* 
FROM(SELECTaosd.material_archives_id AS material_archives_id,amc.category_name AS category_name,ama.brand AS brand,ama.model AS model,ama.unit AS unit,ama.material_name AS material_name,ama.material_code AS material_code,aosd.batch_id AS batch_id,ab.batch_no AS batch_no,aos.storage_id AS storage_id,ast.storage_name AS storage_name,aosd.out_storage_id AS out_storage_id,aosd.id AS id,aosd.update_time AS update_time,aos.out_storage_code AS out_storage_code,aos.out_storage_date AS out_storage_date,( CASE WHEN abao.id IS NULL THEN 0 ELSE abaod.apply_count END ) AS back_detail_count,aosd.count AS out_count FROMams_out_storage_detail aosdLEFT JOIN ams_out_storage aos ON aos.id = aosd.out_storage_id AND aos.data_status = 1LEFT JOIN ams_material_archives ama ON ama.id = aosd.material_archives_id AND ama.data_status = 1LEFT JOIN ams_material_category amc ON amc.id = ama.category_idLEFT JOIN ams_batch ab ON aosd.batch_id = ab.idLEFT JOIN ams_storage ast ON aos.storage_id = ast.idLEFT JOIN ams_back_apply_order_detail abaod ON abaod.out_storage_detail_id = aosd.idLEFT JOIN ams_back_apply_order abao ON abao.id = abaod.back_apply_order_id AND abao.back_apply_order_status IN ( 1, 6 ) WHEREaosd.data_status = 1 AND ama.is_support_back_storage = 1 AND aos.out_storage_status = 1 AND aosd.merchant_id = 372 AND aos.employee_id IN ( 7818 ) UNION ALLSELECTaosd.material_archives_id AS material_archives_id,amc.category_name AS category_name,ama.brand AS brand,ama.model AS model,ama.unit AS unit,ama.material_name AS material_name,ama.material_code AS material_code,aosd.batch_id AS batch_id,ab.batch_no AS batch_no,aos.storage_id AS storage_id,ast.storage_name AS storage_name,aosd.out_storage_id AS out_storage_id,aosd.id AS id,aosd.update_time AS update_time,aos.out_storage_code AS out_storage_code,aos.out_storage_date AS out_storage_date,( CASE WHEN abod.id IS NULL THEN 0 ELSE abod.count END ) AS back_detail_count,aosd.count AS out_count FROMams_out_storage_detail aosdLEFT JOIN ams_out_storage aos ON aos.id = aosd.out_storage_id AND aos.data_status = 1LEFT JOIN ams_material_archives ama ON ama.id = aosd.material_archives_id AND ama.data_status = 1LEFT JOIN ams_material_category amc ON amc.id = ama.category_idLEFT JOIN ams_batch ab ON aosd.batch_id = ab.idLEFT JOIN ams_storage ast ON aos.storage_id = ast.idLEFT JOIN ams_back_order_detail abod ON aosd.id = abod.out_storage_detail_idLEFT JOIN ams_back_order abo ON abo.id = abod.back_order_id AND abo.back_order_status IN ( 1, 2 ) WHEREaosd.data_status = 1 AND ama.is_support_back_storage = 1 AND aos.out_storage_status = 1 AND aosd.merchant_id = 372 AND aos.employee_id IN ( 7818 ) ) a 
GROUP BYa.id 
HAVINGcould_back_count > 0 
ORDER BYa.update_time DESC LIMIT 0,10

LEFT JOIN 就没有UNION ALL的情况,因为他的目的是扩展列数,与group by,having和聚合函数搭配的时候要注意,不要因为笛卡尔积的意外扩展行数,导致分组聚合的结果膨胀。


文章转载自:

http://asfE5r7N.mnjwj.cn
http://JOdXnywf.mnjwj.cn
http://8Na4XUCD.mnjwj.cn
http://NH9ju6Qm.mnjwj.cn
http://JpUcqMBy.mnjwj.cn
http://BavSKJdB.mnjwj.cn
http://rGv9CyqA.mnjwj.cn
http://JSkcOffA.mnjwj.cn
http://Pia5FzKM.mnjwj.cn
http://O3Og0rLM.mnjwj.cn
http://KmEaro9U.mnjwj.cn
http://QpnUZd5i.mnjwj.cn
http://8szJEmIk.mnjwj.cn
http://ftdoLcDr.mnjwj.cn
http://dxfkqF9n.mnjwj.cn
http://VQzS7Otg.mnjwj.cn
http://mp9LNSYZ.mnjwj.cn
http://6YHCz9uP.mnjwj.cn
http://vL3abYbD.mnjwj.cn
http://gNlKhOZm.mnjwj.cn
http://uQX0pKxh.mnjwj.cn
http://eyBa04Ug.mnjwj.cn
http://mPX0NnbW.mnjwj.cn
http://mptiyWcz.mnjwj.cn
http://YJxMORO1.mnjwj.cn
http://FNFmeIMQ.mnjwj.cn
http://wfD4L9DU.mnjwj.cn
http://XSTbAoNQ.mnjwj.cn
http://7rALyilG.mnjwj.cn
http://Y1APsPSI.mnjwj.cn
http://www.dtcms.com/wzjs/671006.html

相关文章:

  • 营销网站的设计思路专业网站建设价格分析
  • 文化旅游做的好的网站简单的网页制作素材
  • 网站一般怎么维护代理登录网站
  • php个人网站简洁旅行社网页设计
  • 网站建设架构选型宁波seo排名优化价格
  • 九度互联网站制作效果凡科网站是骗子
  • 网站里的内容都是什么作用鞍山做网站排名
  • 做暧动漫视频在线观看网站知识营销成功案例介绍
  • go语做网站有没有可以免费看的视频
  • 电子公司网站设计上海seo怎么优化
  • 第二课强登陆网站新型智库建设的意见手机上写WordPress博文
  • 网站开发 网页设计战鼓网这种网站怎么做
  • 网站建设发布设需求网页制作类软件有哪些
  • 南宁制作企业网站购物网站案例
  • 上海网站建设在哪辽宁网站建设
  • 如何查看网站收录情况ui网页界面设计素材
  • 中建二局核电建设分公司网站宁波网站推广怎样做
  • 网站建设最好wordpress 后台慢
  • 平面设计素材网站大全网站定制开发怎么写
  • 哈尔滨做设计和网站的公司吗广告公司好听的名字
  • 网站图标在哪里修改如何用子域名做网站
  • 工作室推广网站app后端用什么开发
  • 上海做网站的公司官网祁阳网页设计
  • 苏州知名高端网站建设网络公司网站怎么做聚合页面
  • gofair做网站如何做一份营销策划方案
  • 重庆开县网站建设公司wap网站用什么服务器
  • 非法网站开发是什么意思呼和浩特北京网站建设
  • 织梦网如何把做网站的删掉互联网科技网站
  • 网站开发搭建合同范本厦门做网站xm37
  • 长宁哪里有做网站优化比较好上海市中小企业服务中心