J'ai un problème avec mes requêtes dans MySQL. Mon tableau a 4 colonnes et il ressemble à ceci:
id_users id_product quantity date
1 2 1 2013
1 2 1 2013
2 2 1 2013
1 3 1 2013
id_users
et id_product
sont des clés étrangères de différentes tables.
Ce que je veux, c'est supprimer une seule ligne:
1 2 1 2013
Ce qui apparaît deux fois, donc je veux juste le supprimer.
J'ai essayé cette requête:
delete from orders where id_users = 1 and id_product = 2
Mais il supprimera les deux (car ils sont dupliqués). Des conseils pour résoudre ce problème?
mysql
delete-row
Dani
la source
la source
Toutes les tables doivent avoir une clé primaire (constituée d'une ou de plusieurs colonnes), les lignes en double n'ont pas de sens dans une base de données relationnelle. Vous pouvez limiter le nombre de lignes de suppression en utilisant
LIMIT
cependant:Mais cela ne résout que votre problème actuel, vous devriez certainement travailler sur le plus gros problème en définissant des clés primaires.
la source
Vous devez spécifier le nombre de lignes à supprimer. Dans votre cas (et je suppose que vous ne voulez en garder qu'un), cela peut être fait comme ceci:
la source
La meilleure façon de concevoir une table est d'ajouter une ligne temporaire comme incrémentation automatique et de la conserver comme clé primaire. Nous pouvons donc éviter les problèmes ci-dessus.
la source
Il existe déjà des réponses pour Supprimer une ligne par
LIMIT
. Idéalement, vous devriez avoir une clé primaire dans votre table. Mais s'il n'y en a pas.Je vais donner d'autres moyens:
Je vois que id_users et id_product devraient être uniques dans votre exemple.
Cela supprimera les lignes en double avec les mêmes données.
Mais si vous obtenez toujours une erreur, même si vous utilisez la clause IGNORE, essayez ceci:
S'il y a plusieurs lignes qui ont des valeurs en double, vous pouvez également recréer la table
la source
Vous devez ajouter un identifiant qui s'incrémente automatiquement pour chaque ligne, après quoi vous pouvez supprimer la ligne par son identifiant. donc votre table aura un identifiant unique pour chaque ligne et le id_user, id_product ecc ...
la source