2016-07-21 109 views
0

我有一个Access VBA程序,它将两个表连接起来并将它们存储在另一个表中。我的问题是,代替加入commonField的SQL查询并使用commonField字段的新表,新表具有名为tableName1_commonField的另一个名为tableName2_commonFieldcommonFieldSQL查询加入Access Access VBA中的字段重命名字段

因此,如果查询如下:

SELECT IIPM.*, UNIX.* INTO [UNIX_lob] FROM IIPM INNER JOIN UNIX ON IIPM.[appcode_0] = 
UNIX.[appcode_0]; 

然后appcode_0场是IIPMUNIX之间共同成为新表UNIX_lob命名为IIPM_appcode_0UNIX_appcode_o两个字段时,我希望它仍然是一个单字段appcode_0

我已在SQL查询后跟踪这对右边的指令:

' Set the name of the new table where the joins will be stored. ' 
newTableName = "[" + tableName2 + "_lob]" 

' Join tableName1 and tableName2 on commonField, and store the joined data in newTableName ' 
sqlJoinQuery = "SELECT " + tableName1 + ".*, " + tableName2 + ".*" & _ 
      " INTO " + newTableName & _ 
      " FROM " + tableName1 & _ 
      " INNER JOIN " + tableName2 & _ 
      " ON " + tableName1 + "." + commonField + " = " + tableName2 + "." + commonField + ";" 
Debug.Print sqlJoinQuery 
CurrentDb.Execute sqlJoinQuery 
+1

将被预期进入VBA的行为,因为你不能有2列,名称相同。但你的问题是什么?为什么会发生?因为字段名称在表格之间重复,并且您正在选择通配符的所有列。如何阻止它?不要选择所有列。如何追加而不是加入?使用Union全部 – Matt

+0

我不知道这是预期的行为,并认为在编写我的查询时出错。谢谢 - 在这种情况下,如果我重命名其中一列,那就足够了。 – Paradox

+0

马特说什么。没有任何真正的方法可以做到这一点,我可以想到,你将不得不实际列出你所有的领域。那么,也许你可以遍历字段集合并将它们全部写入数组,但这听起来像一场噩梦。 –

回答

1

写我的上述评论后,我看到了你的其他问题,所以我想我会扩大我有点上面说的:

CREATE TABLE JoinTable (table1_key long null, table1_somecolumn text(50) null, table2_key long null, table2_somecolumn text(50) null); 

然后在做这件事,

INSERT INTO JoinTable (Table1_key, table1_somecolumn, table2_key, table2_somecolumn) 
SELECT t1.key, t1.somecolumn, t2.key, t2.somecolumn 
FROM Table1 t1 INNER JOIN Table2 t2 ON t1.key = t2.key 

这应该做你后(一个是什么lbeit那毫无疑问你的查询看起来有点混乱不止这些!)

希望这有助于