im essayant d'appliquer Cette solution à mes données dans le tableau dans MySQL DB qui a duplicate. Et je reçois une telle erreur:
SQL Error [1093] [HY000]: You can't specify target table 'NAME' for update in FROM clause DELETE NAME FROM NAME WHERE NAME.id NOT IN (SELECT MIN(id) FROM NAME GROUP BY col1, col2)
5 Réponses :
Essayez ceci peut vous aider
DELETE FROM NAME
WHERE NAME.id NOT IN (
SELECT * FROM (
SELECT MIN(id) FROM NAME GROUP BY col1,col2
) AS p
)
Mais en fait, je ne comprends pas - si Docs dit que vous ne pouvez pas faire sous-requêtes à Supprimer (voir AIB Réponse) - Pourquoi votre solution fonctionne-t-elle?
sa discussion sur ici < / a>
Cela a fonctionné mais pourquoi nous ne pouvons pas spécifier ce que nous mettons à jour. J'ai commencé à apprendre SQL de [ici] (sql.learncodethhardward.org/book/ex8.html). Ici, ils l'utilisaient dans l'exercice8 et exercice10. Vérifiez s'il vous plaît.
Si vous souhaitez supprimer des enregistrements d'une table Utilisez Supprimer de Tablename code>. Vous ne pouvez pas spécifier une colonne ici. Si vous souhaitez supprimer les données d'une colonne, veuillez utiliser l'instruction de mise à jour pour définir la valeur de la colonne sur vide ou null. P>
du manuel :
"Actuellement, vous ne pouvez pas supprimer d'une table et sélectionner dans la même table dans une sous-requête." P>
Utilisez un moteur de base de données approprié ou exécutez les requêtes séparément. (Stockage de l'identifiant de manière programmatique, entre les deux.) P>
Pouvez-vous donner l'exemple?
D'une bonne base de données? PostgreSQL.
La syntaxe de Supprimer P>
ne pas nécessiter le nom des colonnes php> car mysql Supprimer toutes les données qui répondent à une condition p>
Votre requête est correcte et fonctionnerait sur d'autres SGBD, mais MySQL ne vous permet pas de mettre à jour ou de supprimer d'une table et de sélectionner dans la même table dans une sous-requête. Il est documenté sur l'officiel Supprimer DOCS.
IT pourrait être corrigé sur les versions futures, mais votre requête n'est actuellement pas prise en charge. P>
Un correctif simple serait de mettre votre sous-requête dans une sous-sous-requier, comme dans ECHO_ME Réponse: P>
DELETE N1
FROM
NAME N1 INNER JOIN NAME N2
ON
N1.col1=N2.COL1
AND N1.col2=N2.col2
AND N1.ID > N2.ID
Votre requête ne ressemble à celle de la solution que vous essayez d'appliquer. Ils utilisent une jointure, alors que vous utilisez
pas dans code>.@ggyal mon lien pointe sur le commentaire, pas à la réponse
Ah, assez juste; Je n'avais pas remarqué ça. Ce commentaire est SQL Server spécifique. Vous trouverez que la jointe donnée dans la réponse fonctionnera dans MySQL.