2011-07-07 15 views
27

Mam tabeli z kolumnami: (to jest tylko przykład mam 50k rekordów)aktualizowanie kolumny z numerem sekwencji mysql

Name, Number 

Joe  Null 
Michael Null 
Moses Null 

mogę zaktualizować numer z numerem sekwencji od 1-3 tak będzie to wyglądać tak:

Name, Number 

Joe  1 
Michael 2 
Moses 3 

Jak mogę to zrobić w SQL dla MySQL w jednym poleceniu SQL

+1

Na czym polega rzekoma kolejność? Alfabetyczny? – JNK

+0

Nie ma znaczenia. Muszę mieć w liczbach wszystkie liczby od 1-3 (1-size) – Dejell

Odpowiedz

1

można spróbować ustawienie Number do auto_increment tak zostaną wygenerowane numery:

ALTER TABLE your_table MODIFY Number INT AUTO_INCREMENT 

Poza tym, prawdopodobnie trzeba: a) przechowywane procedury b) kod aplikacji

2

Próbowałem znaleźć odpowiedź przez Internet i stwierdziłem, że dla mnie działa następująca metoda, oparta na niektórych z powyższych informacji, ale z inną metodą aktualizacji. Opublikuj tutaj, na wypadek, gdyby pomógł także innym.

Uwaga: dla mojego zestawu danych ranga jest jednorazową, stałą kalkulacją, nie zmieni się. Chciałem dodać go jako kolumnę, aby zapisać obliczenia za każdym razem, gdy pobierasz dane z MySQL do Pythona.

Rozwiązanie użyłem:

  • zestaw Ranking 0 (jak wyżej)
  • utworzyć tabelę tymczasową zawierający kwerendę wybierającą obliczyć rangę
  • zaktualizować oryginalną tabelę z obliczonych szeregach.

nazwy Przykładowe stosowane rowid jest unikalny identyfikator dla każdego wiersza, wartość metryki, które zostaną wykorzystane do określenia rangi dla każdego wiersza

SET @rank=0; 
CREATE TEMPORARY TABLE rank_temp 
AS 
(SELECT rowid, value, @rank:[email protected]+1 AS rank FROM source_table ORDER BY value ASC); 

UPDATE sourcetable a, rank_temp b 
SET a.rank = b.rank 
WHERE a.rowid = b.rowid; 

To prymitywny sposób, ale pracował na mój zbiór danych.

+1

Czasami klejnoty można znaleźć poufny kod poufnych informacji, bardzo przydatne w moim przypadku, cudowna próba –