楼主: arron刘

【每周一议】干货讨论 如何合并两个查询的结果集的数据

[复制链接]
论坛徽章:
86
秀才
日期:2015-09-21 09:46:16目光如炬
日期:2014-07-28 06:00:03马上有钱
日期:2014-06-16 15:55:42马上有房
日期:2014-06-16 15:55:422014年世界杯参赛球队: 伊朗
日期:2014-06-13 11:29:242014年世界杯参赛球队:巴西
日期:2014-06-06 14:36:14马上有钱
日期:2014-04-04 13:51:21马上加薪
日期:2014-04-04 13:35:40马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02
11#
发表于 2012-11-7 11:47 | 只看该作者
jimn1982 发表于 2012-11-7 11:30
这个的确很不错啊。很简单的问题。版主怎么哪里讨论啊。

这个问题应该是从大数据量来进行考虑吧

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
12#
发表于 2012-11-7 12:42 | 只看该作者
lz要求用mysql实现?

使用道具 举报

回复
论坛徽章:
21
2012新春纪念徽章
日期:2012-11-09 15:23:26奥运会纪念徽章:铁人三项
日期:2012-11-21 16:56:32奥运会纪念徽章:马术
日期:2012-11-21 16:57:09双黄蛋
日期:2012-11-15 18:14:55嫦娥
日期:2012-11-09 15:23:26凯迪拉克
日期:2013-08-07 11:30:472013年新春福章
日期:2013-02-25 14:51:24奥运会纪念徽章:网球
日期:2012-12-10 17:56:28奥运会纪念徽章:帆船
日期:2012-12-03 14:25:26奥运会纪念徽章:艺术体操
日期:2012-12-03 14:25:26
13#
发表于 2012-11-7 12:46 | 只看该作者
除了3楼的写法没啥别的想法了,哈哈

使用道具 举报

回复
论坛徽章:
9
蛋疼蛋
日期:2011-10-18 11:00:17ITPUB十周年纪念徽章
日期:2011-11-01 16:25:51蜘蛛蛋
日期:2011-11-09 13:48:06迷宫蛋
日期:2011-11-24 10:38:342012新春纪念徽章
日期:2012-01-04 11:56:44蜘蛛蛋
日期:2013-07-12 21:52:36凯迪拉克
日期:2013-12-12 09:53:072014年新春福章
日期:2014-02-18 16:44:08马上有对象
日期:2014-02-18 16:44:08
14#
发表于 2012-11-7 12:47 | 只看该作者
大家都发出了oracle的,那我发一个mysql版的吧,mysql没有full out join

mysql> select * from newUser;
+---------------------+------+
| dt                  | num  |
+---------------------+------+
| 2012-11-01 00:00:00 |    1 |
| 2012-11-02 00:00:00 |    3 |
| 2012-11-05 00:00:00 |    8 |
+---------------------+------+
3 rows in set (0.00 sec)

mysql> select * from oldUser;
+---------------------+------+
| dt                  | num  |
+---------------------+------+
| 2012-11-01 00:00:00 |    5 |
| 2012-11-02 00:00:00 |    3 |
+---------------------+------+
2 rows in set (0.00 sec)

mysql> select a.dt,a.num new_num,ifnull(b.num,0) old_num from newUser a left join oldUser b on a.dt=b.dt union all select a.dt,a.num new_num,ifnull(b.num,0) old_num from newUser b join oldUser a on a.dt=b.dt  where b.dt is null;
+---------------------+---------+---------+
| dt                  | new_num | old_num |
+---------------------+---------+---------+
| 2012-11-01 00:00:00 |       1 |       5 |
| 2012-11-02 00:00:00 |       3 |       3 |
| 2012-11-05 00:00:00 |       8 |       0 |
+---------------------+---------+---------+
3 rows in set (0.00 sec)


使用道具 举报

回复
论坛徽章:
21
2012新春纪念徽章
日期:2012-11-09 15:23:26奥运会纪念徽章:铁人三项
日期:2012-11-21 16:56:32奥运会纪念徽章:马术
日期:2012-11-21 16:57:09双黄蛋
日期:2012-11-15 18:14:55嫦娥
日期:2012-11-09 15:23:26凯迪拉克
日期:2013-08-07 11:30:472013年新春福章
日期:2013-02-25 14:51:24奥运会纪念徽章:网球
日期:2012-12-10 17:56:28奥运会纪念徽章:帆船
日期:2012-12-03 14:25:26奥运会纪念徽章:艺术体操
日期:2012-12-03 14:25:26
15#
发表于 2012-11-7 12:50 | 只看该作者
〇〇 发表于 2012-11-7 12:42
lz要求用mysql实现?

看主题的所在版块,貌似是哦。

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
16#
发表于 2012-11-7 13:04 | 只看该作者
dukope 发表于 2012-11-7 12:47
大家都发出了oracle的,那我发一个mysql版的吧,mysql没有full out join

mysql> select * from newUser;
...

join oldUser a on a.dt=b.dt  where b.dt is null;
没有outer是什么含义?

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
17#
发表于 2012-11-7 13:24 | 只看该作者

  1. [oracle@redflag11012501 home]$ mysql -uroot
  2. mysql: Unknown OS character set 'GB18030'.
  3. mysql: Switching to the default character set 'latin1'.
  4. Welcome to the MySQL monitor.  Commands end with ; or \g.
  5. Your MySQL connection id is 1
  6. Server version: 5.5.13-log MySQL Community Server (GPL)

  7. Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.

  8. Oracle is a registered trademark of Oracle Corporation and/or its
  9. affiliates. Other names may be trademarks of their respective
  10. owners.

  11. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

  12. mysql> create table ou (dt date, uid int);
  13. ERROR 1046 (3D000): No database selected
  14. mysql> use test
  15. Database changed
  16. mysql> create table ou (dt date, uid int);
  17. Query OK, 0 rows affected (0.02 sec)

  18. mysql> create table nu (dt date, uid int);
  19. Query OK, 0 rows affected (0.01 sec)

  20. mysql> insert into ou values(date' 2012-11-1
  21.     '> ',1);
  22. Query OK, 1 row affected (0.01 sec)

  23. mysql> insert into ou values(date' 2012-11-2
  24. ',3);
  25. Query OK, 1 row affected (0.01 sec)

  26. mysql> insert into ou values(date' 2012-11-5
  27. ',8);
  28. Query OK, 1 row affected (0.00 sec)

  29. mysql> insert into nu values(date' 2012-11-1
  30. ',5);
  31. Query OK, 1 row affected (0.00 sec)

  32. mysql> insert into nu values(date' 2012-11-2
  33. ',3);
  34. Query OK, 1 row affected (0.00 sec)

  35. mysql> select * from ou;
  36. +------------+------+
  37. | dt         | uid  |
  38. +------------+------+
  39. | 2012-11-01 |    1 |
  40. | 2012-11-02 |    3 |
  41. | 2012-11-05 |    8 |
  42. +------------+------+
  43. 3 rows in set (0.02 sec)

  44. mysql> select * from nu;
  45. +------------+------+
  46. | dt         | uid  |
  47. +------------+------+
  48. | 2012-11-01 |    5 |
  49. | 2012-11-02 |    3 |
  50. +------------+------+
  51. 2 rows in set (0.00 sec)

  52. mysql> select o.dt,ou.uid,nu.uid from(select dt from ou union select dt from nu)o left join ou using(dt) left join nu using(dt);
  53. +------------+------+------+
  54. | dt         | uid  | uid  |
  55. +------------+------+------+
  56. | 2012-11-01 |    1 |    5 |
  57. | 2012-11-02 |    3 |    3 |
  58. | 2012-11-05 |    8 | NULL |
  59. +------------+------+------+
  60. 3 rows in set (0.00 sec)

  61. mysql> select o.dt,ifnull(ou.uid,0)newu,ifnull(nu.uid,0)oldu from(select dt from ou union select dt from nu)o left join ou using(dt) left join nu using(dt);
  62. +------------+------+------+
  63. | dt         | newu | oldu |
  64. +------------+------+------+
  65. | 2012-11-01 |    1 |    5 |
  66. | 2012-11-02 |    3 |    3 |
  67. | 2012-11-05 |    8 |    0 |
  68. +------------+------+------+
  69. 3 rows in set (0.01 sec)

  70. mysql>
复制代码

使用道具 举报

回复
论坛徽章:
21
2012新春纪念徽章
日期:2012-11-09 15:23:26奥运会纪念徽章:铁人三项
日期:2012-11-21 16:56:32奥运会纪念徽章:马术
日期:2012-11-21 16:57:09双黄蛋
日期:2012-11-15 18:14:55嫦娥
日期:2012-11-09 15:23:26凯迪拉克
日期:2013-08-07 11:30:472013年新春福章
日期:2013-02-25 14:51:24奥运会纪念徽章:网球
日期:2012-12-10 17:56:28奥运会纪念徽章:帆船
日期:2012-12-03 14:25:26奥运会纪念徽章:艺术体操
日期:2012-12-03 14:25:26
18#
发表于 2012-11-7 15:01 | 只看该作者
mysql直接插入好几条即可
INSERT INTO t able1 VALUES(1),(2),(3),(4),(5);

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
19#
发表于 2012-11-7 15:22 | 只看该作者
smarck 发表于 2012-11-7 15:01
mysql直接插入好几条即可
INSERT INTO t able1 VALUES(1),(2),(3),(4),(5);

本来想写通用一些,结果mysql还没有nvl

使用道具 举报

回复
论坛徽章:
15
生肖徽章2007版:猪
日期:2009-03-11 15:09:30优秀写手
日期:2013-12-18 09:29:11比亚迪
日期:2013-08-28 12:44:17复活蛋
日期:2013-06-19 15:03:392013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15奥运会纪念徽章:手球
日期:2012-08-28 17:54:31奥运会纪念徽章:柔道
日期:2012-08-14 16:26:23咸鸭蛋
日期:2012-08-14 16:26:232010广州亚运会纪念徽章:射击
日期:2012-08-14 16:26:23
20#
发表于 2012-11-7 15:40 | 只看该作者
我来一个SQL Server 2012 的:
  1. create table a(
  2.   id  int,
  3.   Mydate Date
  4. )
  5. insert into a
  6. select 1,'2012-11-1' union all
  7. select 3,'2012-11-2' union all
  8. select 8,'2012-11-5'

  9. create table b(
  10.   id  int,
  11.   Mydate Date
  12. )
  13. insert into b
  14. select 5,'2012-11-1' union all
  15. select 3,'2012-11-2'

  16. ;with cte as(
  17.   select *,1 Num from a
  18.   union all
  19.   select *, 2 Num from b
  20. )
  21. select MyDate,
  22.        max(case Num when 1 then id else 0 end) new_user,
  23.            max(case Num when 2 then id else 0 end) old_user
  24. from cte
  25. group by myDate
复制代码

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表