Mam problem z zapytaniami w MySQL. Moja tabela ma 4 kolumny i wygląda mniej więcej tak:
id_users id_product quantity date
1 2 1 2013
1 2 1 2013
2 2 1 2013
1 3 1 2013
id_users
i id_product
są kluczami obcymi z różnych tabel.
Chcę usunąć tylko jeden wiersz:
1 2 1 2013
Który pojawia się dwukrotnie, więc chcę go tylko usunąć.
Próbowałem tego zapytania:
delete from orders where id_users = 1 and id_product = 2
Ale usunie oba z nich (ponieważ są zduplikowane). Jakieś wskazówki dotyczące rozwiązania tego problemu?
mysql
delete-row
Dani
źródło
źródło
Wszystkie tabele powinny mieć klucz podstawowy (składający się z jednej lub wielu kolumn), zduplikowane wiersze nie mają sensu w relacyjnej bazie danych. Możesz ograniczyć liczbę usuwanych wierszy za pomocą
LIMIT
:Ale to tylko rozwiązuje twój obecny problem, zdecydowanie powinieneś popracować nad większym problemem, definiując klucze podstawowe.
źródło
Musisz określić liczbę wierszy, które mają zostać usunięte. W twoim przypadku (i zakładam, że chcesz zachować tylko jeden) można to zrobić w następujący sposób:
źródło
Najlepszym sposobem zaprojektowania tabeli jest dodanie jednego tymczasowego wiersza jako automatycznego zwiększania i zachowanie jako klucza podstawowego. Dzięki temu możemy uniknąć takich powyższych problemów.
źródło
Istnieją już odpowiedzi dotyczące usuwania wiersza według
LIMIT
. Idealnie powinieneś mieć klucz podstawowy w swojej tabeli. Ale jeśli nie ma.Podam inne sposoby:
Widzę, że id_users i id_product powinny być unikalne w twoim przykładzie.
Spowoduje to usunięcie zduplikowanych wierszy z tymi samymi danymi.
Ale jeśli nadal otrzymujesz błąd, nawet jeśli używasz klauzuli IGNORE, spróbuj tego:
Jeśli istnieje wiele wierszy, które mają zduplikowane wartości, możesz również ponownie utworzyć tabelę
źródło
Musisz dodać identyfikator, który jest automatycznie zwiększany dla każdego wiersza, po czym możesz usunąć wiersz według jego identyfikatora. więc twoja tabela będzie miała unikalny identyfikator dla każdego wiersza i id_user, id_product ecc ...
źródło