目前mysql还不支持full join,只能使用left join、union、right join来实现。但使用这个方法解决多次full join的话代码量非常庞大,一直在思考有没有其他替代方法。

今天解决一个问题的时候突然想到了一个替代方法:使用行列转换。

这个方法有一定的局限性,就是连接条件在2个连接表中最多只能有一条记录(不过大部分连接情况也就是连接条件在连接表中最多只有一条记录)。

下面是我具体实现的sql:

select

b.the_day, max(if(b.type_id = 1, b.amount, 0)) purchase_amount, max(if(b.type_id = 1, b.interest, 0)) purchase_interest,

max(if(b.type_id = 2, b.amount, 0)) withdrawal_amount, max(if(b.type_id = 2, b.interest, 0)) withdrawal_interest

from

(select

a.the_day, round(max(if(a.type_id = 1, a.money, 0))) amount, max(if(a.type_id = 2, a.money, 0)) interest, 1 type_id

from

(select

date(pe.purchase_begin_time) the_day, sum(pe.amount) money, 1 type_id

from

purchase pe

inner join product pt on pe.product_id = pt.product_id and pt.type_id = 9

where pe.purchase_status_id = 4 and pe.purchase_begin_time < '2015-08-13 21:00:00'

group by the_day

union all

select

date(uci.creat_time) the_day, sum(uci.interest) money, 2 type_id

from

user_current_interest uci

where uci.type = 'IN' and uci.creat_time < '2015-08-14'

group by the_day

) a

group by a.the_day

union all

select

date(wd.withdrawal_begin_time) the_day, sum(wd.amount), sum(wd.profit), 2 type_id

from

withdrawal wd

where wd.withdrawal_status_id in (4, 5) and wd.product_id = 0 and wd.withdrawal_begin_time < '2015-08-14'

group by the_day

) b

group by b.the_day; 大致思路说下:2个被连接表增加一个标识字段,使用不同的值,之后将这2个表union all下,使用连接条件将union all的结果分组且使用行列转换。

mysql不同字段full join_Mysql实现full join的替换方法相关推荐

  1. mysql添加字段uniquekey索引_MySQL数据库之mysql为字段添加和删除唯一性索引(unique) 的方法...

    本文主要向大家介绍了MySQL数据库之mysql为字段添加和删除唯一性索引(unique) 的方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 1.添加PRIMARY KEY ...

  2. mysql 重复字段查询及排除重复值

    转载链接:http://blog.sina.com.cn/s/blog_3edc5e2e010131ys.html mysql 重复字段查询及排除重复值 SELECT a.id,a.title FRO ...

  3. MySQL 一个字段,用’,‘隔开,存储多个id,关联查询

    MySQL 一个字段,用','隔开,存储多个id,关联查询 因为朋友过来问我,一个商品表的一个颜色的关联字段,里面放着多个颜色的id,这些id用逗号隔开,然后想要查出一条商品记录上显示出所有颜色.实现 ...

  4. mysql 全连接_MySQL全连接(Full Join)实现,union和union all用法

    MySQL本身不支持你所说的full join(全连接),但可以通过union来实现 , 下面是一个简单测试,可以看看: mysql> CREATE TABLE a(id int,name ch ...

  5. MYSQL数据库字段关联_MySQL数据库基础——操作关系表、连接查询

    MySQL数据库基础入门--day11 一.操作关联表 1.关联关系: 关联关系有:多对一.多对多和一对多. 一对一关联关系可以应用在以下几方面: (1)分割具有很多列的表 (2)由于安全原因而隔离表 ...

  6. JDBC操作MySQL Lob字段记实

    JDBC操作MySQL Lob字段记实 虽然Java的持久化框架多如牛毛,但都离不开JDBC技术,JDBC在某些时候是其他框架难以取代的.也是java操作数据库最根本的技术. 上文写了JDBC操作DB ...

  7. MySql 查询表字段数

    MySql 查询表字段数 SELECT COUNT(*) FROM information_schema.columns WHERE table_schema='test_cases' AND tab ...

  8. MySQL添加字段和修改字段的方法

    MySQL添加字段的方法并不复杂,下面将为您详细介绍MySQL添加字段和修改字段等操作的实现方法,希望对您学习MySQL添加字段方面会有所帮助. 1.登录数据库 >mysql -u root - ...

  9. mysql修改字段为现在时间_mysql如何修改字段自动生成时间

    mysql修改字段自动生成时间的方法:1.添加CreateTime设置默认时间:2.修改CreateTime设置默认时间:3.添加UpdateTime设置默认时间. 本教程操作环境:windows7系 ...

最新文章

  1. 【学习参考】Animate.css动画演示
  2. ABAP Netweaver和SAP Hybris的内存管理
  3. OpenCV学习(二十二) :反向投影:calcBackProject(),mixChannels()
  4. 远程办公(2)-重新定义“雇佣关系”:交易成果,而不是时间
  5. SylixOS PCI 驱动 分析--设备枚举
  6. 国家统计局统计用区划和城乡划分代码
  7. oeasy php,oeasy之PhotoshopCS3视频教程 - 轻松自学网
  8. 计算机网络七层结构与功能,网络七层结构介绍
  9. ESP8266无线模块相互通信
  10. echarts中中国地图飞机路线使用
  11. Google Play App Signing
  12. error C4996: ‘strcpy‘: This function or variable may be unsafe. Consider using strcpy_s instead.
  13. [memo] dlopen 与 --export-dynamic
  14. setserial - 取得/设置 Linux 串行口的信息
  15. 微型计算机与接口技术答案,微机原理及接口技术-习题答案
  16. AddressList
  17. RLC串并联谐振回路特性、如何判断容性感性
  18. 赴京领SOA年度明星博客奖后记
  19. 日期格式转换oracle,Oracle 关于日期格式转换与使用
  20. Java项目:大学生健康档案管理系统(java+jpa+swagger-ui+springboot+vue+mysql)

热门文章

  1. 【Silverlight】解决DataTemplate绑定附加属性
  2. 联想将在CES上展示LePad平板
  3. [导入]创建、查询、修改带名称空间的 XML 文件的例子
  4. vue-resource 拦截器(interceptor)的使用
  5. iOS10 权限访问崩溃
  6. 【Django】认证系统
  7. 我心中的MySQL DBA
  8. 捕捉Entity framework 6的详细异常提示
  9. win8, VS2013 .NET 4.5在哪找svcutil.exe?
  10. springxml解析