Foxtable(狐表)用户栏目专家坐堂 → [原创]按时间段UNION不确定数量但相似表名SQL写法


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

主题:[原创]按时间段UNION不确定数量但相似表名SQL写法

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


加好友 发短信
等级:婴狐 帖子:63 积分:1252 威望:0 精华:0 注册:2009/6/8 11:12:00
[原创]按时间段UNION不确定数量但相似表名SQL写法  发帖心情 Post By:2010/12/11 22:45:00 [只看该作者]

如果表A、表B结构相同,可以:

 

Select * From {表A} UNION Select * From {表B}

 

注意只能作为查询表。

 

现在我有许多表,这些表按月生产,表名

生产记录201009,

生产记录201010,

生产记录201011,

生产记录201012,

生产记录201101,

生产记录201102,

..............

结构完全相同

现在联合查询UNION,从某段时间到某段时间符合条件的记录

怎么写Select句?

Select {record%}.生产记录ID From user_all_tables INNER JOIN {产品安排表} ON {record%}.产品ID = {产品安排表}.产品ID where table_name like 'record%' and BETWEEN '# var("开始时间") #' AND '# var("结束时间") #'

 

是这是思路吗?

[此贴子已经被作者于2010-12-11 22:49:35编辑过]

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


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2010/12/11 23:41:00 [只看该作者]

你可以亲自试一下啊

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


加好友 发短信
等级:婴狐 帖子:63 积分:1252 威望:0 精华:0 注册:2009/6/8 11:12:00
  发帖心情 Post By:2010/12/12 10:34:00 [只看该作者]

就是试过了不行才上来问得,在百度上也找了,在foxtable上也找了,无果。


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/12 10:53:00 [只看该作者]

你可以尝试在foxtable中合成SQL语句,然后再执行:

 

例如:

 

Dim nms() As String = {"表A", "表B", "表C"}
Dim SQL As String
For Each nm As String  In nms
    If SQL > "" Then
        SQL = SQL & " UNION "
    End If
    SQL = SQL & "Select * From {"  & nm & "}"
Next

 


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


加好友 发短信
等级:婴狐 帖子:63 积分:1252 威望:0 精华:0 注册:2009/6/8 11:12:00
  发帖心情 Post By:2010/12/12 11:09:00 [只看该作者]

Dim nms() As String = {"表A", "表B", "表C"}其中"表A", "表B", "表C"指的是什么?能不能具体讲一下,有点摸不到脉络

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/12 11:23:00 [只看该作者]

呵呵,就是你要准备查询的那些表的表名啊。

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/12 11:31:00 [只看该作者]

我来给你一段完整的,没有经过测试,请自行调试,但原理应该是通的:

 

假定你的数据源的链接名称为"nwnd",从2009年5月到2010年10月的表:
 
Dim lst As List(Of String)

Dim ym1 As Integer = "生产记录200905"

Dim ym2 As Integer = "生产记录201010"

lst = Connections("nwnd").GetTableNames
For Each nm As String In lst
     If nm>=ym1 AndAlso nm<=ym2 Then

        lst.Add(nm)

    End IF
Next

Dim SQL As String
For Each nm As String  In Lst
    If SQL > "" Then
        SQL = SQL & " UNION "
    End If
    SQL = SQL & "Select * From {"  & nm & "}"
Next
OutPut.Show("合成的SQL语句:" & SQL)

 

 

[此贴子已经被作者于2010-12-12 11:31:25编辑过]

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2010/12/12 17:22:00 [只看该作者]

这种情况要用

UNION ALL

因为UNION 连接表之后,还会检查有没有重复记录。

 


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/12 19:05:00 [只看该作者]

呵呵,是应该加上All,因为这里不需要排除重复。


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


加好友 发短信
等级:婴狐 帖子:63 积分:1252 威望:0 精华:0 注册:2009/6/8 11:12:00
  发帖心情 Post By:2010/12/13 10:45:00 [只看该作者]

测试不行,我有如下疑问:

 

Dim lst As List(Of String)

Dim ym1 As Integer = "生产记录200905"‘这里应该是String才对

Dim ym2 As Integer = "生产记录201010"  ‘这里应该是String才对

lst = Connections("nwnd").GetTableNames
For Each nm As String In lst
     If nm>=ym1 AndAlso nm<=ym2 Then  ‘String应该不能用>=或则<=号吧,但我不知道如何写,用  like '生产记录%' ?

        lst.Add(nm)

    End IF
Next

Dim SQL As String
For Each nm As String  In Lst
    If SQL > "" Then
        SQL = SQL & " UNION ALL" 
    End If
    SQL = SQL & "Select * From {"  & nm & "}"
Next
OutPut.Show("合成的SQL语句:" & SQL)


 回到顶部
总数 22 1 2 3 下一页