집 >데이터 베이스 >MySQL 튜토리얼 >구문 오류를 방지하기 위해 MySQL DELETE 문에서 하위 쿼리를 올바르게 사용하는 방법은 무엇입니까?
하위 쿼리를 조건으로 사용하는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!