关乎mysql中union、union all 的使用
2016-03-24 14:37
686 查看
一、在写sql语句时如果想要将两组差不读相同的数据同时返回就会用到union 、union all
1、首先它俩的区别:union 去重、排序、效率稍慢;union all 不去重、不排序、效率比union 快
所以如果并的两组数据没有重复数据用 union all 效率快
2、两组数据对应的字段必须名称相同,如果一个有、一个没有,可以用占位表示‘’
但是如果外面要套select * from 的话就不能用占位‘’表示了,必须全部对应显示
SELECT* FROM(SELECT g.id,g.createUser,g.goodUser,
CASE IFNULL(u.image,'') WHEN '' THEN '' ELSE CONCAT('"+getImageUsersPath()+"',u.image) END AS image,
u.isMember vip, CASE u.usertype WHEN '1' THEN '个人' ELSE '企业' END AS usertype, r.grade,sp.region_name startProvince,sc.region_name startCity,
ep.region_name endProvince,ec.region_name endCity,CAST(g.loadingtime AS CHAR) loadingTime ,
g.longGoodType,g.weightVolumeValue,g.models,g.price,g.longCarLength carsLength,g.startAddr,g.endAddr, g.echolocationAddr,
CAST(g.echolocationTime AS CHAR) echolocationTime,g.longitude,g.latitude, g.isLongdis,g.recDistance,g.expectTime ,t.startPrice,t.unitPrice,gp.typeName,
(SELECT IF(COUNT(*)=0,'0','1') FROM trorderinfo td WHERE td.driver=18 AND td.orderStatus=2 AND orderType=1 AND td.goodSourceId=g.id )isRob,
IFNULL(ROUND((6378.138*2*ASIN(SQRT(POW(SIN((89*PI()/180-g.latitude*PI()/180)/2),2)+COS(89*PI()/180)*COS(g.latitude*PI()/180)*POW(SIN((108*PI()/180-g.longitude*PI()/180)/2),2)))),1),0) AS distance
FROM `goodssource` g LEFT JOIN trend_region sp ON g.startProvince=sp.region_id
LEFT JOIN trend_region sc ON g.startCity=sc.region_id
LEFT JOIN trend_region ep ON g.endProvince=ep.region_id
LEFT JOIN trend_region ec ON g.endCity=ec.region_id
LEFT JOIN blue_sys_user2 u ON u.id=g.createUser
LEFT JOIN (SELECT CONCAT (IFNULL(b.carModel,''),IFNULL(a.carModel,'')) AS models ,a.id AS carTypeId ,
a.carLength AS carsLength ,a.startPrice AS startPrice,a.unitPrice AS unitPrice
FROM same_city_car_type a LEFT JOIN same_city_car_type b ON a.pid=b.id ) t ON t.carTypeId = g.sameModels
LEFT JOIN goodstypeset gp ON gp.id=g.goodType
LEFT JOIN reputationgrade r ON u.creditGrade=r.id WHERE g.isLongdis=1 AND g.createUser=1
UNION ALL
SELECT g.id,g.createUser,g.goodUser, CASE IFNULL(u.image,'') WHEN '' THEN '' ELSE CONCAT('http://10.58.178.81:8018/WKWL/upload/image/sj/',u.image) END AS image,
u.isMember vip, CASE u.userType WHEN '1' THEN '个人' ELSE '企业' END AS userType, r.grade,sp.region_name startProvince,sc.region_name startCity,
ep.region_name endProvince,ec.region_name endCity,CAST(g.loadingTime AS CHAR) loadingTime ,
g.longGoodType,g.weightVolumeValue,t.models,g.price,t.carsLength carsLength,g.startAddr,g.endAddr, g.echolocationAddr,
CAST(g.echolocationTime AS CHAR) echolocationTime,g.longitude,g.latitude, g.isLongdis,g.recDistance,g.expectTime,t.startPrice,t.unitPrice,gp.typeName,
(SELECT IF(COUNT(*)=0,'0','1') FROM trorderinfo td WHERE td.driver=18 AND td.orderStatus=2 AND orderType=2 AND td.goodSourceId=g.id )isRob,
IFNULL(ROUND((6378.138*2*ASIN(SQRT(POW(SIN((89*PI()/180-g.latitude*PI()/180)/2),2)+COS(89*PI()/180)*COS(g.latitude*PI()/180)*POW(SIN((108*PI()/180-g.longitude*PI()/180)/2),2)))),1),0) AS distance FROM goodssource g LEFT JOIN trend_region sp ON g.startProvince=sp.region_id
LEFT JOIN trend_region sc ON g.startCity=sc.region_id
LEFT JOIN trend_region ep ON g.endProvince=ep.region_id
LEFT JOIN trend_region ec ON g.endCity=ec.region_id
LEFT JOIN blue_sys_user2 u ON u.id=g.createUser
LEFT JOIN (SELECT CONCAT (IFNULL(b.carModel,''),IFNULL(a.carModel,'')) AS models ,a.id AS carTypeId ,
a.carLength AS carsLength ,a.startPrice AS startPrice,a.unitPrice AS unitPrice
FROM same_city_car_type a LEFT JOIN same_city_car_type b ON a.pid=b.id ) t ON t.carTypeId = g.sameModels
LEFT JOIN goodstypeset gp ON gp.id=g.goodType
LEFT JOIN reputationgrade r ON u.creditGrade=r.id WHERE g.isLongdis=2 AND g.createUser=1) tt
1、首先它俩的区别:union 去重、排序、效率稍慢;union all 不去重、不排序、效率比union 快
所以如果并的两组数据没有重复数据用 union all 效率快
2、两组数据对应的字段必须名称相同,如果一个有、一个没有,可以用占位表示‘’
但是如果外面要套select * from 的话就不能用占位‘’表示了,必须全部对应显示
SELECT* FROM(SELECT g.id,g.createUser,g.goodUser,
CASE IFNULL(u.image,'') WHEN '' THEN '' ELSE CONCAT('"+getImageUsersPath()+"',u.image) END AS image,
u.isMember vip, CASE u.usertype WHEN '1' THEN '个人' ELSE '企业' END AS usertype, r.grade,sp.region_name startProvince,sc.region_name startCity,
ep.region_name endProvince,ec.region_name endCity,CAST(g.loadingtime AS CHAR) loadingTime ,
g.longGoodType,g.weightVolumeValue,g.models,g.price,g.longCarLength carsLength,g.startAddr,g.endAddr, g.echolocationAddr,
CAST(g.echolocationTime AS CHAR) echolocationTime,g.longitude,g.latitude, g.isLongdis,g.recDistance,g.expectTime ,t.startPrice,t.unitPrice,gp.typeName,
(SELECT IF(COUNT(*)=0,'0','1') FROM trorderinfo td WHERE td.driver=18 AND td.orderStatus=2 AND orderType=1 AND td.goodSourceId=g.id )isRob,
IFNULL(ROUND((6378.138*2*ASIN(SQRT(POW(SIN((89*PI()/180-g.latitude*PI()/180)/2),2)+COS(89*PI()/180)*COS(g.latitude*PI()/180)*POW(SIN((108*PI()/180-g.longitude*PI()/180)/2),2)))),1),0) AS distance
FROM `goodssource` g LEFT JOIN trend_region sp ON g.startProvince=sp.region_id
LEFT JOIN trend_region sc ON g.startCity=sc.region_id
LEFT JOIN trend_region ep ON g.endProvince=ep.region_id
LEFT JOIN trend_region ec ON g.endCity=ec.region_id
LEFT JOIN blue_sys_user2 u ON u.id=g.createUser
LEFT JOIN (SELECT CONCAT (IFNULL(b.carModel,''),IFNULL(a.carModel,'')) AS models ,a.id AS carTypeId ,
a.carLength AS carsLength ,a.startPrice AS startPrice,a.unitPrice AS unitPrice
FROM same_city_car_type a LEFT JOIN same_city_car_type b ON a.pid=b.id ) t ON t.carTypeId = g.sameModels
LEFT JOIN goodstypeset gp ON gp.id=g.goodType
LEFT JOIN reputationgrade r ON u.creditGrade=r.id WHERE g.isLongdis=1 AND g.createUser=1
UNION ALL
SELECT g.id,g.createUser,g.goodUser, CASE IFNULL(u.image,'') WHEN '' THEN '' ELSE CONCAT('http://10.58.178.81:8018/WKWL/upload/image/sj/',u.image) END AS image,
u.isMember vip, CASE u.userType WHEN '1' THEN '个人' ELSE '企业' END AS userType, r.grade,sp.region_name startProvince,sc.region_name startCity,
ep.region_name endProvince,ec.region_name endCity,CAST(g.loadingTime AS CHAR) loadingTime ,
g.longGoodType,g.weightVolumeValue,t.models,g.price,t.carsLength carsLength,g.startAddr,g.endAddr, g.echolocationAddr,
CAST(g.echolocationTime AS CHAR) echolocationTime,g.longitude,g.latitude, g.isLongdis,g.recDistance,g.expectTime,t.startPrice,t.unitPrice,gp.typeName,
(SELECT IF(COUNT(*)=0,'0','1') FROM trorderinfo td WHERE td.driver=18 AND td.orderStatus=2 AND orderType=2 AND td.goodSourceId=g.id )isRob,
IFNULL(ROUND((6378.138*2*ASIN(SQRT(POW(SIN((89*PI()/180-g.latitude*PI()/180)/2),2)+COS(89*PI()/180)*COS(g.latitude*PI()/180)*POW(SIN((108*PI()/180-g.longitude*PI()/180)/2),2)))),1),0) AS distance FROM goodssource g LEFT JOIN trend_region sp ON g.startProvince=sp.region_id
LEFT JOIN trend_region sc ON g.startCity=sc.region_id
LEFT JOIN trend_region ep ON g.endProvince=ep.region_id
LEFT JOIN trend_region ec ON g.endCity=ec.region_id
LEFT JOIN blue_sys_user2 u ON u.id=g.createUser
LEFT JOIN (SELECT CONCAT (IFNULL(b.carModel,''),IFNULL(a.carModel,'')) AS models ,a.id AS carTypeId ,
a.carLength AS carsLength ,a.startPrice AS startPrice,a.unitPrice AS unitPrice
FROM same_city_car_type a LEFT JOIN same_city_car_type b ON a.pid=b.id ) t ON t.carTypeId = g.sameModels
LEFT JOIN goodstypeset gp ON gp.id=g.goodType
LEFT JOIN reputationgrade r ON u.creditGrade=r.id WHERE g.isLongdis=2 AND g.createUser=1) tt
相关文章推荐
- Mysql5.7 安装
- mysql5.7.11密码修改
- MYSQL性能查看(命中率,慢查询)
- mysql update特殊写法
- sql server和my sql 命令(语句)的差别,sql server与mysql的比較
- MySQL5.6安装
- mysql开启慢查询方法
- mysqlbinlog 查看binlog时报错unknown variable 'default-character-set=utf8'
- PowerDesigner 的mysql PDM 的COMMENT注释改为name+comment
- MySQL Binlog的介绍
- mysql监视器MONyog的使用
- mysql的主从复制
- mysql-5.7.9-winx64 MySQL服务无法启动,服务没有报告任何错误 的解决办法
- MySQL 去除字段中的换行和回车符
- Mac 安装和卸载 Mysql5.7.11 的方法
- mysql读写分离
- mysql的auto_increment详解
- windowns下解压缩安装mysql-5.7.11-winx64
- mysql schedule job
- mysql 系列