Maison > base de données > tutoriel mysql > Comment utiliser correctement les sous-requêtes dans les instructions MySQL DELETE pour éviter les erreurs de syntaxe ?

Comment utiliser correctement les sous-requêtes dans les instructions MySQL DELETE pour éviter les erreurs de syntaxe ?

Susan Sarandon
Libérer: 2025-01-10 18:01:44
original
142 Les gens l'ont consulté

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

Instruction MySQL DELETE utilisant une sous-requête comme condition

Dans MySQL, l'instruction DELETE vous permet de supprimer des lignes d'une table en fonction de conditions spécifiées. Une situation courante consiste à utiliser des sous-requêtes pour définir des conditions. Cependant, il peut être frustrant de rencontrer des erreurs de syntaxe en essayant de procéder ainsi.

Un utilisateur a tenté de supprimer des lignes de la table term_hierarchy à l'aide de la requête suivante :

<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>
Copier après la connexion

Cependant, cela a entraîné l'erreur suivante :

<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>
Copier après la connexion

Le problème ici est une limitation de MySQL : la table en cours de suppression (term_hierarchy dans ce cas) ne peut pas être utilisée dans une sous-requête de la condition. Cette restriction vous empêche d'auto-référencer des tables dans les instructions DELETE.

Solution :

Pour contourner cette limitation, vous pouvez utiliser une sous-requête imbriquée qui référence la sous-requête sans inclure la table à supprimer. La requête modifiée suivante le démontre :

<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>
Copier après la connexion

En encapsulant une sous-requête dans une autre sous-requête (nommée x dans cet exemple), MySQL peut effectuer des opérations de suppression sans violer la restriction d'auto-référence.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal