>데이터 베이스 >MySQL 튜토리얼 >구문 오류를 방지하기 위해 MySQL DELETE 문에서 하위 쿼리를 올바르게 사용하는 방법은 무엇입니까?

구문 오류를 방지하기 위해 MySQL DELETE 문에서 하위 쿼리를 올바르게 사용하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-10 18:01:44142검색

How to Correctly Use Subqueries in MySQL DELETE Statements to Avoid Syntax Errors?

하위 쿼리를 조건으로 사용하는 MySQL DELETE 문

MySQL에서 DELETE 문을 사용하면 지정된 조건에 따라 테이블에서 행을 삭제할 수 있습니다. 일반적인 상황은 하위 쿼리를 사용하여 조건을 정의하는 것입니다. 그러나 이 작업을 수행하려고 할 때 구문 오류가 발생하면 실망스러울 수 있습니다.

사용자가 다음 쿼리를 사용하여 term_hierarchy 테이블에서 행을 삭제하려고 했습니다.

<code class="language-sql">DELETE FROM term_hierarchy AS th
WHERE th.parent = 1015 AND th.tid IN (
    SELECT DISTINCT(th1.tid)
    FROM term_hierarchy AS th1
    INNER JOIN term_hierarchy AS th2 ON (th1.tid = th2.tid AND th2.parent != 1015)
    WHERE th1.parent = 1015
);</code>

그러나 이로 인해 다음 오류가 발생했습니다.

<code>You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS th
WHERE th.parent = 1015 AND th.tid IN (
  SELECT DISTINCT(th1.tid)
  FROM ter' at line 1</code>

여기서 문제는 MySQL의 제한 사항입니다. 삭제되는 테이블(이 경우 term_hierarchy)은 조건의 하위 쿼리에서 사용할 수 없습니다. 이러한 제한으로 인해 DELETE 문에서 테이블 자체 참조를 수행할 수 없습니다.

해결책:

이 제한 사항을 해결하려면 삭제할 테이블을 포함하지 않고 하위 쿼리를 참조하는 중첩 하위 쿼리를 사용할 수 있습니다. 다음 수정된 쿼리는 이를 보여줍니다.

<code class="language-sql">DELETE e.*
FROM tableE e
WHERE id IN (SELECT id
             FROM (SELECT id
                   FROM tableE
                   WHERE arg = 1 AND foo = 'bar') x);</code>

하위 쿼리를 다른 하위 쿼리(이 예에서는 x라고 함)로 래핑함으로써 MySQL은 자체 참조 제한을 위반하지 않고 삭제 작업을 수행할 수 있습니다.

위 내용은 구문 오류를 방지하기 위해 MySQL DELETE 문에서 하위 쿼리를 올바르게 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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