복붙노트

[SQL] 내부 조인에서 SQL 업데이트

SQL

내부 조인에서 SQL 업데이트

나는 Microsoft Access를 사용하고 있습니다.

이 쿼리 경우 :

(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. ==============================

    1.하위 쿼리 반환 더 한 값보다 업데이트에 당신이 원하는 새로운 가치와 테이블 (EXAMPLETABLE) 사이에 (가입)를 연결하는 두 번째 키를 필요로한다고 가정.

    하위 쿼리 반환 더 한 값보다 업데이트에 당신이 원하는 새로운 가치와 테이블 (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)
    

    참고이 경우 당신은 하위 쿼리가 하나 개 이상의 행을 반환하지 않을 것이라는 점을 보장 할 필요가 있음!

  2. ==============================

    2.확실하지 데이터와 EXAMPLETABLE의 관계가 있지만, 일반적으로 무엇인지.

    확실하지 데이터와 EXAMPLETABLE의 관계가 있지만, 일반적으로 무엇인지.

    Access에서 SET 부분은 가입 후, 또한 의해 순서 엉 선택 부분을 건너 뛸 수 있습니다. 이 같은이어야한다

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

    그렇지 않은 작업을 구축하려고 않으면 쿼리 빌더에 참여

  3. ==============================

    3.두 테이블 간의 관계를 정의 할 필요가 없습니다. 10 (Arnoldiusss)이 거의 정확하고 가장 이해와 짧은 솔루션 지금까지 답변. 그리고 실행에서 가장 빠른. 그러나 예제 코드는 잘못된 것입니다. 다음 코드는 내 응용 프로그램 중 하나에서오고 MS ACCESS 2013 년 벌금을 실행합니다.

    두 테이블 간의 관계를 정의 할 필요가 없습니다. 10 (Arnoldiusss)이 거의 정확하고 가장 이해와 짧은 솔루션 지금까지 답변. 그리고 실행에서 가장 빠른. 그러나 예제 코드는 잘못된 것입니다. 다음 코드는 내 응용 프로그램 중 하나에서오고 MS ACCESS 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;
    
  4. from https://stackoverflow.com/questions/12882212/sql-updating-from-an-inner-join by cc-by-sa and MIT license