Foxtable(狐表)用户栏目专家坐堂 → 请教:关于查询表的行来自多个表按时间顺序排列的最优算法。


  共有3318人关注过本帖树形打印复制链接

主题:请教:关于查询表的行来自多个表按时间顺序排列的最优算法。

帅哥哟,离线,有人找我吗?
关键下一秒
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:816 积分:6685 威望:0 精华:2 注册:2012/8/23 12:35:00
请教:关于查询表的行来自多个表按时间顺序排列的最优算法。  发帖心情 Post By:2014/9/24 14:28:00 [只看该作者]

有如下表:
表1-进料表   内容如下:
      进货日期         金额
      2014-01-21  10000
      2014-02-13  1212
      2014-03-21   233
      2014-06-12   4300
      2014-08-04   2340
表2-退货表  内容如下:
      退货日期          金额
      2014-03-02    -12
      2014-05-30    -144
      2014-09-21    -340

现在要按时间顺序将上面两个表的数据加入下表:
表3-结帐单
      凭证日期       金额
      2014-01-21  10000
      2014-02-13  1212
      2014-03-02    -12
      2014-03-21   233
      2014-05-30    -144
      2014-06-12   4300
      2014-08-04   2340
      2014-09-21    -340
请教:在数据量比较多时,怎样做速度最快?
    以上,谢谢!


 
[此贴子已经被作者于2014-9-24 14:28:25编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/9/24 14:33:00 [只看该作者]

五、UNION 运算符

UNION运算符用于组合两个查询的结果。
例如有一个客户表,一个供应商表,我需要得到所有在中国的客户和供应商的名称和地址。
因为数据位于不同的表中,显然,我们需要用两个查询才能完成任务:

SELECT 公司名称, 地址 FROM {客户} WHERE 国家 = '中国' UNION SELECT 公司名称, 地址 FROM {供应商} WHERE 国家 = '中国'

两个查询的字段名称、个数、类型必须完全一致才行。

默认情况下,UNION会自动排除重复的行,然后你可以用ALL关键词来确保返回所有的行,例如:

SELECT 公司名称, 地址 FROM {客户} WHERE 国家 = '中国' UNION ALL SELECT 公司名称, 地址 FROM {供应商} WHERE 国家 = '中国'


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/9/24 14:35:00 [只看该作者]

后面的 WHere 国家='中国'   改为 Order BY [进货日期]

 回到顶部
帅哥哟,离线,有人找我吗?
关键下一秒
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:816 积分:6685 威望:0 精华:2 注册:2012/8/23 12:35:00
  发帖心情 Post By:2014/9/24 14:43:00 [只看该作者]

谢谢!但是:

两个查询的字段名称、个数、类型必须完全一致才行。


这个条件中的“字段名称”没办法保证。有没有更好的办法呢?

另外,这查询出来的内容没办法解决上面的排序要求。


[此贴子已经被作者于2014-9-24 14:44:36编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/9/24 14:44:00 [只看该作者]

as 另命名就好了  select 列1 as 新名称,

 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2014/9/24 14:55:00 [只看该作者]

5楼是最好解决方法,效率最高

 回到顶部
帅哥哟,离线,有人找我吗?
关键下一秒
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:816 积分:6685 威望:0 精华:2 注册:2012/8/23 12:35:00
  发帖心情 Post By:2014/9/24 15:04:00 [只看该作者]

谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
关键下一秒
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:816 积分:6685 威望:0 精华:2 注册:2012/8/23 12:35:00
  发帖心情 Post By:2014/9/24 15:29:00 [只看该作者]

SELECT 收料单别 as 凭证单别,收料单号序号 as 凭证单号,收料日期 as 凭证日期, 进货金额-扣款金额 as 应付金额 FROM {PUR收料单} WHERE 确认码 = 'Y' and 结帐码=0 UNION ALL SELECT 退货单别 as 凭证单别,退货单号 as 退货单号,退货日期 as 凭证日期,0-退货金额 as 应付金额 FROM {PUR退货单单头} WHERE 确认码 = 'Y' and 结帐码=0  UNION  SELECT 进货单别 as 凭证单别,进货单号序号 as 凭证单号,进货日期 as 凭证日期, 加工金额-扣款金额 as 应付金额 FROM {MOC托外进货单档} WHERE 确认码 = 'Y' and 结帐码=0 UNION ALL SELECT 退货单别 as 凭证单别,退货单号 as 退货单号,退货日期 as 凭证日期,0-退货金额 as 应付金额 FROM {MOC托外退货单头档} WHERE 确认码 = 'Y' and 结帐码=0   ORDER BY 凭证日期  

确实很快!图片点击可在新窗口打开查看

 回到顶部