2016-07-21 3 views
0

두 테이블을 조인하고 다른 테이블에 저장하는 Access VBA 프로그램이 있습니다. 내 질문은 commonField에 가입하고 commonField 필드가있는 새 테이블을 갖는 SQL 쿼리 대신 tableName1_commonField이라는 commonField이라는 테이블과 tableName2_commonField이라는 테이블이 있습니다.Access VBA에서 field renames 필드의 JOIN 쿼리

그래서, 쿼리는 경우 다음과 같은 : 나는 그것이 유지하고자 할 때

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

그런 다음 IIPMUNIX에 공통되는 appcode_0 필드는 새 테이블 UNIX_lobIIPM_appcode_0UNIX_appcode_o라는 두 개의 필드가된다 단일 필드 appcode_0. 나는 다른 질문을했다

' 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

을하는 데 도움이됩니다. 그러나 당신의 질문은 무엇입니까? 왜 그런 일이 일어나는거야? 테이블간에 필드 이름이 반복되고 모든 열에 대해 와일드 카드를 선택하기 때문입니다. 어떻게 그걸 막을 수 있니? 모든 열을 선택하지 마십시오. 가입하기보다는 추가하는 방법? Union All 사용 – Matt

+0

예상되는 동작이며 내 쿼리를 작성하는 데 실수 였다고 생각하지 않았습니다. 고마워요.이 경우 열의 이름을 바꾸면 충분합니다. – Paradox

+0

매트가 말한 것. 내가 생각할 수있는 것을 총체적으로 할 수있는 실제적인 방법이 없다. 실제로 모든 분야를 나열해야 할 것이다. 음, 아마도 필드 콜렉션을 반복해서 배열에 모두 쓸 수는 있지만, 그것은 악몽처럼 들릴 수 있습니다. –

답변

1

위 내 댓글을 작성 후, 그래서 나는 내가 조금 위의 말에 확장 것이라고 생각 :

나는 SQL 쿼리 직후에이 문제를 추적 한이 실행됩니다 :

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 

그리고 이것은 당신이 (A 계신해야 의심의 여지 쿼리는이보다 약간 지저분 보일 것 lbeit!)

희망이 당신이 열이 같은 이름이 수 없기 때문에 액세스 VBA에 대한 행동을 예상 할 수