Ich habe ein Problem mit meinen Abfragen in MySQL. Meine Tabelle hat 4 Spalten und sieht ungefähr so aus:
id_users id_product quantity date
1 2 1 2013
1 2 1 2013
2 2 1 2013
1 3 1 2013
id_users
und id_product
sind Fremdschlüssel aus verschiedenen Tabellen.
Ich möchte nur eine Zeile löschen:
1 2 1 2013
Was zweimal erscheint, also möchte ich es nur löschen.
Ich habe diese Abfrage versucht:
delete from orders where id_users = 1 and id_product = 2
Beide werden jedoch gelöscht (da sie dupliziert werden). Irgendwelche Hinweise zur Lösung dieses Problems?
mysql
delete-row
Dani
quelle
quelle
Alle Tabellen sollten einen Primärschlüssel haben (bestehend aus einer oder mehreren Spalten), doppelte Zeilen sind in einer relationalen Datenbank nicht sinnvoll. Sie können die Anzahl der Löschzeilen wie folgt begrenzen
LIMIT
:Aber das löst nur Ihr aktuelles Problem. Sie sollten auf jeden Fall an dem größeren Problem arbeiten, indem Sie Primärschlüssel definieren.
quelle
Sie müssen die Anzahl der Zeilen angeben, die gelöscht werden sollen. In Ihrem Fall (und ich gehe davon aus, dass Sie nur einen behalten möchten) kann dies folgendermaßen geschehen:
quelle
Der beste Weg, eine Tabelle zu entwerfen, besteht darin, eine temporäre Zeile als automatische Inkrementierung hinzuzufügen und als Primärschlüssel beizubehalten. So können wir solche oben genannten Probleme vermeiden.
quelle
Es gibt bereits Antworten zum Löschen der Zeile durch
LIMIT
. Idealerweise sollten Sie einen Primärschlüssel in Ihrer Tabelle haben. Aber wenn nicht.Ich werde andere Wege geben:
Ich sehe, dass id_users und id_product in Ihrem Beispiel eindeutig sein sollten.
Dadurch werden doppelte Zeilen mit denselben Daten gelöscht.
Wenn Sie dennoch eine Fehlermeldung erhalten, auch wenn Sie die IGNORE-Klausel verwenden, versuchen Sie Folgendes:
Wenn es mehrere Zeilen mit doppelten Werten gibt, können Sie auch eine Tabelle neu erstellen
quelle
Sie müssen eine ID hinzufügen, die für jede Zeile automatisch erhöht wird. Danach können Sie die Zeile anhand ihrer ID löschen. Ihre Tabelle hat also eine eindeutige ID für jede Zeile und den id_user, id_product ecc ...
quelle