Rss & SiteMap

Foxtable(狐表) http://www.foxtable.com

新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!
共22 条记录, 每页显示 10 条, 页签: [1] [2][3]
[浏览完整版]

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

1楼
shofihsu 发表于: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楼
唐尸三摆手 发表于:2010/12/11 23:41:00
你可以亲自试一下啊
3楼
shofihsu 发表于:2010/12/12 10:34:00

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

4楼
狐狸爸爸 发表于: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

 

5楼
shofihsu 发表于:2010/12/12 11:09:00
Dim nms() As String = {"表A", "表B", "表C"}其中"表A", "表B", "表C"指的是什么?能不能具体讲一下,有点摸不到脉络
6楼
狐狸爸爸 发表于:2010/12/12 11:23:00
呵呵,就是你要准备查询的那些表的表名啊。
7楼
狐狸爸爸 发表于: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编辑过]
8楼
lxl 发表于:2010/12/12 17:22:00

这种情况要用

UNION ALL

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

 

9楼
狐狸爸爸 发表于:2010/12/12 19:05:00

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

10楼
shofihsu 发表于: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 条记录, 每页显示 10 条, 页签: [1] [2][3]

Copyright © 2000 - 2018 foxtable.com Tel: 4000-810-820 粤ICP备11091905号

Powered By Dvbbs Version 8.3.0
Processed in .04688 s, 2 queries.