MySQL UPDATE

Odpowiedz Nowy wątek
2014-05-31 16:36
0

Witam serdecznie będę wdzięczny jeżeli wytłumaczy mi ktoś co robię źle głowie się nad prostym zadaniem i moim zdaniem to powinno działać;p ale jak widać zdanie początkującego studenta jest często błędne

mam wykonać takie oto zadanie:
Wszystkim pracownikom zarabiającym mniej niż 50%
najwyższej płacy podstawowej podnieś pensją o 20%
średniej płacy w ich zespole.

UPDATE pracownicy p
SET placa_pod=placa_pod+0.2 (
SELECT AVG(placa_pod)
FROM pracownicy
WHERE id_zesp=p.id_zesp)
WHERE placa_pod<0.5
(
SELECT MAX(placa_pod)
FROM pracownicy);

Rozwiązałem to w ten oto sposób ale otrzymuje błąd:
#1093 - You can't specify target table 'p' for update in FROM clause

Mógł by mi ktoś to poprawić bo w wielu zadaniach napotkałem taki błąd i nie potrafiłem go poprawić może jak zrozumiem na tym przykładzie będzie lepiej z góry dziękuję jbc pracuje na phpMyAdmin MySQL

Pozostało 580 znaków

2014-05-31 18:27
0

Najwyższa płaca podstawowa to

SELECT MAX(placa_pod) FROM pracownicy;

Wszyscy pracownicy którzy mają poniżej 50% najwyższej płacy podstawowej

SELECT id FROM pracownicy WHERE placa_pod < (SELECT MAX(placa_pod) FROM pracownicy) * 0.5;

I teraz na koniec

UPDATE pracownicy p SET placa_o = ((SELECT AVG(placa_pod) FROM pracownicy WHERE id_zesp = p.id_zesp) * 0.2) + placa_pod WHERE id IN (SELECT id FROM pracownicy WHERE placa_pod < (SELECT MAX(placa_pod) FROM pracownicy) * 0.5);

Co tu zaszło? dodałem kolumne placa_o żebyś porównał wyniki ale zamiast placa_o możesz dać placa_pod. W każdym razie Robimy UPDATE na tabelce pracownicy p i ustawiamy pole płacy takie gdzie (wybieramy średnia dla danej grupy SELECT AVG) wtedy z tego selecta id_zesp musi rownać się p.id_zesp i dla danej grupy masz już średnią. powiększamy ją o 20% i dodajemy do tego to co zarabia i na konieć updatujemy gdzie id IN i tu wybieramy ID gdzie sa pracownicy majacy te nizsze zarobki o 50% jakoś tak

Twoim bledem jest to ze nie wskazales co chcesz updateowac bo wybrales okreslone osoby czyli wszyscy pracownicy spelniajacy dany warunek i one maja swoje ID i te klucze musisz podac przy updacie: update tabela set pole=cos where id in (6,77,2,33,78)

Up: porawilem blad bo liczylem pe sje srednia plus 20 procent sredniej a nie pod

edytowany 3x, ostatnio: masterO, 2014-05-31 19:01

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0