IT

MySQL이 조인된 테이블 업데이트

itgroup 2023. 1. 31. 20:45
반응형

MySQL이 조인된 테이블 업데이트

조인 수가 여러 개인 스테이트먼트의 테이블을 갱신합니다.조인 순서는 그다지 중요하지 않지만(옵티마이저 힌트를 사용하지 않는 한) 가장 직관적으로 읽을 수 있도록 주문했습니다.그러나 이로 인해 업데이트하려는 테이블이 원래 테이블과 달라져 업데이트에 어려움을 겪고 있습니다.

제가 하고 싶은 일의 더미 예는 다음과 같습니다.

UPDATE b
FROM tableA a
JOIN tableB b
   ON a.a_id = b.a_id
JOIN tableC c
   ON b.b_id = c.b_id
SET b.val = a.val+c.val
WHERE a.val > 10
    AND c.val > 10;

여기에는 Join을 사용한 업데이트에 대한 게시물이 많지만 항상 먼저 업데이트되는 테이블이 있습니다.SQL Server에서도 가능하고 MySQL Too에서도 가능한 것으로 알고 있습니다.

MySQL의 다중 테이블 UPDATE 구문은 Microsoft SQL Server와 다릅니다.SET 절에 암시되어 있는 갱신할 테이블을 지정할 필요는 없습니다.

UPDATE tableA a
JOIN tableB b
   ON a.a_id = b.a_id
JOIN tableC c
   ON b.b_id = c.b_id
SET b.val = a.val+c.val
WHERE a.val > 10
    AND c.val > 10;

MySQL 구문에는 FROM 절이 없습니다.

JOIN을 사용한 UPDATE는 표준 SQL이 아니며 MySQL과 Microsoft SQL Server 모두 표준 구문의 확장으로 자체 아이디어를 구현했습니다.

당신은 명세서의 순서를 잘못 알고 있습니다.여기서 구문을 읽어보실 수 있습니다(알겠습니다만, 꽤 읽기 어렵습니다).

UPDATE tableA a
  JOIN tableB b
    ON a.a_id = b.a_id
  JOIN tableC c
    ON b.b_id = c.b_id
   SET b.val = a.val+c.val
 WHERE a.val > 10
   AND c.val > 10;

sql 바이올린

이 상황에서 사용할 수 있는 또 다른 올바른 구성:

UPDATE T1, T2,
[INNER JOIN | LEFT JOIN] T1 ON T1.C1 = T2.C1
SET T1.C2 = T2.C2, 
    T2.C3 = expr
WHERE condition

위의 예는 다음과 같습니다.MySQL UPDATE JOIN.

MySQL 8.0 레퍼런스 매뉴얼을 참조하면 여러 테이블 UPDATE 구문에 대한 설명을 볼 수 있습니다.

UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET assignment_list
[WHERE where_condition]

table_references 구에는 에 관련된 테이블이 나열됩니다.join.

따라서 다중 테이블 MySQL의 구문은FROM,ORDER BY또는LIMITsingle-table 구문이 아닌 구문을 사용합니다.

링크는 MySQL에 필요한 구문을 제공합니다.다음은 예를 제시하겠습니다.왜 두 테이블을 합칠 필요가 있죠?갱신된 기록을 제한하기 위한 것입니까?당신은 다음과 같은 것도 할 수 있기 때문에 질문합니다.

update B set B.x=<value>
    where 
B.<value> is in(
    select A.y 
      from A left outer join B on A.<value>=B.<value>
)

언급URL : https://stackoverflow.com/questions/8331687/mysql-update-a-joined-table

반응형