>  기사  >  데이터 베이스  >  FROM 절에서 업데이트할 대상 테이블 'table_name'을 지정할 수 없습니다. - MySQL 오류 해결 방법: FROM 절에서 대상 테이블을 업데이트할 수 없습니다.

FROM 절에서 업데이트할 대상 테이블 'table_name'을 지정할 수 없습니다. - MySQL 오류 해결 방법: FROM 절에서 대상 테이블을 업데이트할 수 없습니다.

PHPz
PHPz원래의
2023-10-05 10:25:131393검색

You can't specify target table 'table_name' for update in FROM clause - 如何解决MySQL报错:无法在FROM子句中更新目标表

안녕하세요. 다음은 FROM 절에서 업데이트할 대상 테이블 'table_name'을 지정할 수 없습니다라는 제목의 1500자 이내의 기사입니다. - MySQL 오류 해결 방법: FROM 절에서 대상 테이블을 업데이트할 수 없습니다. 특정 코드 예가 필요합니다.


MySQL 데이터베이스를 개발하는 동안 다음과 같은 오류 메시지가 나타나는 경우가 있습니다. FROM 절에서 업데이트할 대상 테이블 'table_name'을 지정할 수 없습니다. 이 오류는 일반적으로 하위 쿼리와 함께 UPDATE 문을 사용할 때 발생하며, 특히 업데이트해야 하는 대상 테이블이 하위 쿼리에서 참조되는 경우에 발생합니다.

이 문서에서는 이 오류의 원인을 소개하고 해결 방법과 구체적인 코드 예제를 제공합니다.

먼저 이 오류를 재현하는 예를 살펴보겠습니다.

UPDATE table_name
SET column_name = value
WHERE column_name IN (SELECT column_name FROM table_name WHERE condition);

위 코드에서는 WHERE 조건으로 하위 쿼리를 사용하면서 table_name이라는 테이블을 업데이트하려고 합니다. 그러나 MySQL에서는 FROM 절에서 대상 테이블을 직접 업데이트하는 것이 허용되지 않습니다.

이 오류의 원인은 MySQL이 UPDATE 문을 실행하는 순서에 있습니다. MySQL의 실행 순서는 먼저 FROM 절에서 데이터를 얻은 다음 WHERE 조건에 따라 필터링하고 업데이트 작업을 수행하는 것입니다. 업데이트가 필요한 대상 테이블을 서브쿼리에서 참조하기 때문에 업데이트 중에는 대상 테이블을 참조할 수 없기 때문에 충돌이 발생합니다.

이 문제를 해결하려면 코드를 수정해야 합니다. 다음은 몇 가지 일반적인 해결 방법입니다.

해결 방법 1: INNER JOIN 사용

UPDATE table_name
INNER JOIN (SELECT column_name FROM table_name WHERE condition) AS temp_table
ON table_name.column_name = temp_table.column_name
SET table_name.column_name = value;

위 코드에서는 INNER JOIN을 사용하여 대상 테이블과 하위 쿼리의 결과 집합을 연결하고 WHERE 조건을 통해 필터링합니다. 이러한 방식으로 업데이트 프로세스 중에 오류 메시지 없이 하위 쿼리 결과를 참조할 수 있습니다.

해결책 2: 임시 테이블 사용

CREATE TEMPORARY TABLE temp_table
SELECT column_name FROM table_name WHERE condition;

UPDATE table_name
SET column_name = value
WHERE column_name IN (SELECT column_name FROM temp_table);

이 솔루션에서는 먼저 하위 쿼리의 결과 집합을 임시 테이블에 저장한 다음 임시 테이블을 사용하여 업데이트 작업을 수행합니다. 이렇게 하면 대상 테이블을 업데이트할 때 자체 참조 문제를 피할 수 있습니다.

해결책 3: 하위 쿼리를 필드로 사용

UPDATE table_name
SET column_name = (
    SELECT column_name FROM table_name WHERE condition
)
WHERE column_name = value;

이 솔루션에서는 하위 쿼리를 필드 값으로 업데이트합니다. UPDATE 문에서 하위 쿼리를 필드로 사용하면 FROM 절에서 대상 테이블을 직접 업데이트하는 제한 사항을 우회할 수 있습니다.

요약하자면, MySQL의 FROM 절에서 업데이트할 대상 테이블 'table_name'을 지정할 수 없습니다.라는 오류 메시지가 나타나면 이는 UPDATE 문에서 업데이트되는 대상 테이블을 참조했다는 의미입니다. 이 문제를 해결하기 위해 임시 테이블인 INNER JOIN을 사용하거나 하위 쿼리를 필드로 사용하여 업데이트 작업을 수행할 수 있습니다.

위의 솔루션과 코드 예제가 이 MySQL 오류 문제를 해결하는 데 도움이 되기를 바랍니다! 다른 문의사항이 있으시면 계속 질문해 주시기 바랍니다.

위 내용은 FROM 절에서 업데이트할 대상 테이블 'table_name'을 지정할 수 없습니다. - MySQL 오류 해결 방법: FROM 절에서 대상 테이블을 업데이트할 수 없습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.