一次从数百个表中选择(.mdb)

Nuk*_*uku 1 sql ms-access

我们有.mdb文件,包含数百个表:Lesson1,Lesson2,Lesson3,Lesson4等.所有表都具有相同的结构:

Lesson<n>
----------------
slide_id
name
description
status
created_date
created_by
updated_date
updated_by
Run Code Online (Sandbox Code Playgroud)

什么SQL语句会生成如下结果:

| table_name | slide_id | name                          |
|-----------------------|-------------------------------|
| Lesson1    | 1        | name for slide 1 of lesson 1  |
| Lesson1    | 2        | name for slide 2 of lesson 1  |
| Lesson2    | 1        | name for slide 1 of lesson 2  |
| Lesson2    | 2        | whatever                      |
| Lesson2    | 3        | again whatever                |
Run Code Online (Sandbox Code Playgroud)

等等

所以这里有几点:

  1. 必须包含表名
  2. 有数百张桌子

ric*_*ent 5

如果表名已知,则可以创建如下查询:

 SELECT 'Lesson1' AS table_name, slide_id, name, ... FROM Lesson1
 UNION ALL SELECT 'Lesson2', slide_id, name, ... FROM Lesson2
 UNION ALL SELECT 'Lesson3', slide_id, name, ... FROM Lesson3
 UNION ALL SELECT 'Lesson4', slide_id, name, ... FROM Lesson4
 UNION ALL SELECT 'Lesson5', slide_id, name, ... FROM Lesson5
Run Code Online (Sandbox Code Playgroud)

只有当表的数量不断变化时才需要游标.如果没有,这应该可以解决问题.

提示:要生成初始查询,请在Excel中粘贴表的名称,并在下一个单元格中使用公式来创建该表的"UNION ALL"语句.然后直接复制并粘贴回Access.(或者使用游标动态创建它,但复制/粘贴和快速​​公式很容易,您可以保存excel文件,以防您需要批量添加表,更改选定的列等)

而且,显然,最终解决方案应该是在可能的情况下合并表,并在查询时添加一个鉴别器字段.哎呀,如果必须的话,可以更容易地维护数百个查询,每个查询都拉一个课程的行(再次,Excel可以是一个方便的批量更新工具),而不是数百个必须具有相同结构的课程表.