W przypadku polecenia UPDATE nie omówiłem jednego zagadnienia, otóż jakim poleceniem wykonać operacje modyfikacji rekordów w jednej tabeli korzystając z danych drugiej tabeli. Wiadomo już, iż do modyfikacji rekordów służy polecenie UPDATE, zaś do łączenia tabel INNER JOIN.
W tym przypadku jednak nie możemy łączyć UPDATE i INNER JOIN.
Poniżej przedstawię przykład. Mamy dwie tabele. Jedną: zarobki_nowe drugą: zarobki_stare.
zarobki_stare:
id_pracownika |
kod_dzialu |
pensja_brutto |
12008 |
It-1 |
1000 |
22008 |
Marketing-2 |
2000 |
32008 |
It-1 |
3000 |
zarobki_nowe:
id_pracownika |
kod_dzialu |
pensja_brutto |
12008 |
It-1 |
|
22008 |
Marketing-2 |
|
32008 |
It-1 |
|
Teraz na podstawie tabeli zarobki_stare chcemy uzupełnić pole pensja_brutto w tabeli zarobki_nowe jednocześnie podwyższając je o 20%.
Polecenie wyglądać będzie następująco:
UPDATE zarobki_stare, zarobki_nowe SET zarobki_nowe.pensja_brutto=zarobki_stare.pensja_brutto*1.2 WHERE zarobki_stare.id_pracownika=zarobki_nowe.id_pracownika
i w rezultacie otrzymamy tabele:
id_pracownika |
kod_dzialu |
pensja_brutto |
12008 |
It-1 |
1200 |
22008 |
Marketing-2 |
2400 |
32008 |
It-1 |
3600 |
Oczywiście, że można stosować UPDATE i INNER JOIN, proszę nie wprowadzać w błąd internautów.
Witam.
Mam taki problem.
Chciałbym zmienić w rekordach tlko jakiś znak. Na przykład: “Mankut, Lancut, Banka” zamienić tylko “n” na “ń”. Nie wiem jak tu użyć update. Może zastosować REPLACE???
Będę wdzieczny z pomoc
To takie proste było… uratował mi Pan tyłek
update nazwa_tabeli set nazwa_pola=replace(nazwa_pola,'n','ń')
Witam
A ja mam problem tego typu, że chciałbym zmienić we wszystkich rekordach danej kolumny tabeli tylko pierwszy znak. Na przykład: z 10001234 na 00001234. Pole jest varchar. Gdy zrobię:
update tabela
set kolumna = kolumna – 10000000
znikają mi zera i zostaje sam nr 1234, a zależy mi na tym, aby ta kolumna miała postać z zerami przed numerem (zawsze 8 znaków).
Można posłużyć się funkcją substring, np:
update tabela set kolumna=substring(kolumna, 2, length(kolumna));
W powyższym przykładzie funkcja substring obetnie ciąg od drugiego znaku do końca i przypisze do ‘kolumna’
Witam
Jeśli można spytać: jakim skryptem sql można rozwiązać następujący problem (podmiana danych o różnych wartościach
MAM TABELĘ EW_OBIEKTY w kolumnie RODZAJ chcę zmienić wartości. Wartości chcę skojarzyć po kolumnie NUMER
Stworzyłem skrypt:
update EW_OBIEKTY set RODZAJ=’1′ where NUMER=’AsHHQNql0UmKEL3_sTMwEg’
update EW_OBIEKTY set RODZAJ=’6′ where NUMER=’u7LXzxd1IkKN1uCxDK0gQQ’
skrypt ten działa ale tylko gdy jest pierwsza linia gdy jest ich więcej wywala błąd. Myślę, że problemem jest brak łącznika między linią jeden i dwa ale nie wiem jaki ten łącznik ma być.
Proszę o pomoc i z góry dziękuję
Zapytania należy kończyć znakiem średnika (;). Po ostatnim zapytaniu średnik może wystąpić, ale nie musi.
update EW_OBIEKTY set RODZAJ=’1′ where NUMER=’AsHHQNql0UmKEL3_sTMwEg’;
update EW_OBIEKTY set RODZAJ=’6′ where NUMER=’u7LXzxd1IkKN1uCxDK0gQQ’;
Taka sytuacja:
pierwsza Tabela “Magazyn” posiada m.in. pola “czesc_id” i “qty” a w nim licznik pobranych z magazynu części
druga Tabela “Rozchody” ma też pole “czesc_id” i pole “rozchod” a w nim liczbe wydanych czesci (dla jednego dokumentu rozchodowego oczywiscie)
Jak napisac SELECT’a ktory podsumuje ilosci wydanych czesci na poszczegolnych dokumentach rozchodowych (tabela “Rozchody” i zrobi UPDATE tabeli “Magazyn” dla pola “qty” (wstawi tam te sumy)? Oczywiście tabele łączymy po polu “czesc_id”.
Czyli w skrócie lecimy po wszystkich dokumentach rozchodowych, sumujemy ilosci dla tej samej części a następnie aktualizujemy magazyn w polu “qty” dla danego “czesc_id”