Suppression de lignes non uniques dans MySQL à l'aide d'une instruction Select
La syntaxe de requête fournie
DELETE FROM posts Where> tente de supprimez les lignes qui n'ont pas d'identifiant unique de la table des publications. Cependant, cette syntaxe est incompatible avec MySQL 5.0.</p> <p><strong>Réécriture de la requête</strong></p> <p>Pour rendre la requête compatible avec MySQL 5.0, elle doit être réécrite comme suit :</p> <p>`<pre class="brush:php;toolbar:false">DELETE FROM posts WHERE id IN (</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">SELECT id FROM posts GROUP BY id HAVING ( COUNT(id) > 1 )
)
`
Comprendre la requête révisée
La requête révisée utilise l'opérateur IN pour comparez la colonne id de la table posts avec le jeu de résultats de la sous-requête. La sous-requête récupère les ID des lignes qui ont plusieurs occurrences dans la table posts, indiquant des ID non uniques. En utilisant l'opérateur IN, la requête sélectionne uniquement les lignes avec des identifiants non uniques à supprimer.
Considérations supplémentaires
Comme mentionné dans la référence de la réponse, il est essentiel à noter que MySQL ne permet pas de modifier la même table à partir d'une sous-requête au sein de la même requête. Pour contourner cette restriction, la requête peut être divisée en deux requêtes distinctes : une requête SELECT pour identifier les lignes à supprimer, suivie d'une requête DELETE pour exécuter la suppression. Alternativement, une sous-requête imbriquée avec un alias peut être utilisée pour permettre la suppression au sein d'une seule requête.
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!