2012-10-14 6 views
9

Microsoft Access를 사용하고 있습니다. 내부 조인에서 SQL 업데이트

이 쿼리 경우

(SELECT FERMENT.FermentId 
FROM FERMENT 
INNER JOIN [BELGIUM BEER] 
ON 
FERMENT.FermentName = [BELGIUM BEER].FermentId ORDER BY [BELGIUM BEER].BeerId) a 

이 FermentId 반환, 어떻게 내가 그 열이있는 다른 테이블을 업데이트하려면 어떻게해야합니까?

예 :

UPDATE EXAMPLETABLE 
SET EXAMPLETABLE.FermentId = a.FermentId 
FROM a 
(SELECT FERMENT.FermentId 
FROM FERMENT 
INNER JOIN [BELGIUM BEER] 
ON 
FERMENT.FermentName = [BELGIUM BEER].FermentId ORDER BY [BELGIUM BEER].BeerId) a 
+1

하는 경우 난 당신이 EXAMPLETABLE'하고 UPDATE EXAMPLETABLE이 SET EXAMPLETABLE.FermentId = (가입 발효 INNER로부터 FERMENT.FermentId 을 선택'같은 것을 사용하는 것보다 당신이 선택할 것은'사이의 관계를 필요로 착각하고 있지 않다 [벨기에 맥주 ] ON FER MEL.FermentName = [BELGIUM BEER] .FermentId WHERE EXAMPLETABLE.relationFieldName = [벨기에 맥주] .relationField [벨기에 맥주] .BeerId)' – xception

답변

7

에 참여 구축하려고 doent 경우 이

UPDATE FERMENT 
INNER JOIN ([BELGIUM BEER] ON FERMENT.FermentName = [BELGIUM BEER].FermentId) 
SET EXAMPLETABLE.FermentColumn = a.FermentColumn 

처럼 뭔가해야 (가입)을 새 값과 갱신하려는 테이블 (EXAMPLETABLE) 사이에 넣으십시오. 이 경우

나는 이런 식으로 뭔가하려고 할 것입니다 : 이러한 경우가 서브 쿼리가이 같은 시도, 단일 값을 반환하는 경우

UPDATE T 
SET T.FERMENTID = A.FERMENTID 
FROM EXAMPLETABLE AS T 
     INNER JOIN (SELECT FERMENT.FERMENTID, 
          FERMENT.OTHERID 
        FROM FERMENT 
          INNER JOIN [BELGIUM BEER] 
            ON FERMENT.FERMENTNAME = 
            [BELGIUM BEER].FERMENTID 
        ORDER BY [BELGIUM BEER].BEERID) AS A 
       ON A.OTHERID = T.OTHERID 

을 :

UPDATE EXAMPLETABLE 
SET T.FERMENTID = (SELECT FERMENT.FERMENTID 
         FROM FERMENT 
          INNER JOIN [BELGIUM BEER] 
            ON FERMENT.FERMENTNAME = 
             [BELGIUM BEER].FERMENTID 
         ORDER BY [BELGIUM BEER].BEERID) 

이 경우 하위 쿼리가 둘 이상의 행을 반환하지 않는다는 것을 보장해야합니다.

+1

Lol, 나는 그 말에 적은 단어로 썼다. 내 표를 얻었 어! – xception

+0

행이있는 열 또는 레코드입니까? – user1534664

+0

행! 하위 쿼리가 둘 이상의 행을 반환하면 SQL은 테이블을 업데이트 할 값을 알 수 없습니다. :-) – Gidil

15

데이터와 EXAMPLETABLE의 관계가 무엇인지, 그러나 일반적으로하지 않습니다.

액세스에서 SET 부분은 조인 후에 선택 부분을 건너 뜁니다. 이 작품은 서브 쿼리, 당신은 연결하는 두 번째 키를 필요로 하나 개 이상의 값을 반환한다고 가정하면 쿼리 빌더

3

두 테이블 간의 관계를 정의 할 필요가 없습니다. Answer 10 (Arnoldiusss)은 거의 정확하고 가장 이해하기 쉽고 가장 짧은 해결책입니다. 그리고 실행이 가장 빠릅니다. 그러나 예제 코드는 잘못되었습니다. 다음 코드는 내 응용 프로그램 중 하나에서 오는 내가 좋아하는 ("벨기에 맥주 케이스"를 MS 액세스 2013

UPDATE table1 T1 
    INNER JOIN table2 T2 
    ON T2.Id = T1.Id 
    SET T1.myField = T2.myField; 

에서 잘 실행 표현 ;-)이 될 것이라고 :

UPDATE FERMENT AS T1 
    INNER JOIN [BELGIUM BEER] AS T2 ON T1.FermentName = T2.FermentId 
    SET T1.FermentColumn1 = T2.FermentColumn1;