在VBA for Microsoft Access中是否有嵌套LEFT JOIN的替代方案?

时间:2016-08-09 18:40:17

标签: sql excel vba ms-access access-vba

我正在尝试将bajillion excel电子表格加载到单个标准化数据库中。我的目标是复制每个原始Excel电子表格的结构,但在附加到主表之前将单元格条目(其中大部分频繁重复)转换为外键。我找到了一个ALMOST工作的进程,但我遇到了SQL查询的一些问题。我在VBA中相当精明,但对数据库和SQL来说还是比较陌生的,所以虽然我有信心可以动态生成DoCmd.RunSQL所需的字符串,但我在查询结构方面遇到了麻烦。

这是我要做的事情:
将Excel电子表格导入Access表格后(" tbl_b"),我转换了" tbl_b"中的所有条目。在附加到另一个预先存在的表(" tbl_A")之前到相应的外键。

为了便于说明,请说数据库包含以下表格:

tbl_a
field1_foreignKeys | field2_foreignKeys

tbl_b
field1_import | field2_import

tbl_field1_primaryKeys
field1_primaryKey | FIELD1

tbl_field2_primaryKeys
field2_primaryKey | FIELD2

我可以成功使用以下查询来实现我的目标:

INSERT INTO tbl_a (field1_foreignKeys, field2_foreignKeys)  
SELECT tbl_field1_primaryKeys.field1_primaryKey, tbl_field2_primaryKeys.field2_primaryKey  
FROM (tbl_B LEFT JOIN tbl_field1_primaryKeys ON tbl_b.field1_import = tbl_field1_primaryKeys.field1) LEFT JOIN tbl_field2_primaryKeys ON tbl_B.field2_import = tbl_field2_primaryKeys.field2

这适用于包含两列的excel电子表格,但不幸的是,我使用的电子表格包含26列,每列都必须在追加之前转换为外键。当我嵌套超过八个LEFT JOIN时,访问一直崩溃,所以我需要一个不同的解决方案。希望这可以做到,我错过了一些明显的东西:p

任何参赛者?
............................................... .........................

更新

无论我是否为我的目的使用最佳数据结构(这个数据库dilettante是乐观的),Don George的建议让我走上了工作解决方案的道路:

在我看来,没有必要保留" tbl_b"在原始条件下,所以我使用动态生成的更新查询版本在每个字段中循环:

UPDATE tbl_b LEFT JOIN tbl_field1_primaryKeys
ON tbl_b.field1_import = tbl_field1_primaryKeys.field1
SET tbl_B.field1_import = tbl_field1_primaryKeys.field1_primaryKey

更新tbl_b后,我将所有内容全部附加到tbl_a中。

也许是不优雅的,但我想我会发布我的解决方案,以防任何其他可怜的灵魂在同样的情况下发现自己。

0 个答案:

没有答案