MySQL UPDATE

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

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

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