Problém se sql dotazem

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
Václav Sedlář
Žlutá karta Bazar
Žlutá karta Bazar
Registrován: 01. dub 2006
Bydliště: Liberec
Kontaktovat uživatele:

Problém se sql dotazem

Příspěvek od Václav Sedlář »

Ahoj, mám problém s jedním sql dotazem, který nejde a vypisuje tuto hlášku:
#1093 - You can't specify target table 'ankety_moznosti_vysledky' for update in FROM clause
SQL dotaz:

Kód: Vybrat vše

UPDATE ankety_moznosti_vysledky SET pocet_hlasu = pocet_hlasu -1 WHERE id_ankety = 2 AND id_moznosti = (SELECT max(id_moznosti) FROM ankety_moznosti_vysledky WHERE id_ankety = 2)
Když udělám zvlášť ten select dotaz (co je na konci v závorce), tak mi vrátí id a to když vrazím do updatu, tak to také projde...

tedy toto funguje:

Kód: Vybrat vše

SELECT max(id_moznosti) FROM ankety_moznosti_vysledky WHERE id_ankety = 2

vrátí 3

a pak:

UPDATE ankety_moznosti_vysledky SET pocet_hlasu = pocet_hlasu -1 WHERE id_ankety = 2 AND id_moznosti = 3

update funguje
Proč to tedy nejde v jednom dotazu. Díky

P.S.: Vysvětlení, proč a kde to potřebuji: Mám na stránkách hlasování pro reg. uživatele, když se založí hlasování, tak do tabulky ankety_moznosti_vysledky se zapíše id možnosti (PK), id ankety (FK), text možnosti a počet hlasů. Při zakládání ankety se u všech možností zapíše počet hlasů=0, ale k tomu se vygeneruje ještě jako poslední možnost zdržuji se hlasování, kde se nastaví počet hlasů=počet userů...

Při hlasování tedy se zaznamená hlas pro označenou odpověď a odečte se hlas u možnosti "zdržel se hlasování"

A výše uvedené sql dotazy potřebuji, když se smaže uživatel v době, kdy už je anketa založena, ale ještě nespuštěná...
mlrs
Začátečník
Začátečník
Registrován: 11. kvě 2006
Bydliště: Brno
Kontaktovat uživatele:

Re: Problém se sql dotazem

Příspěvek od mlrs »

nezkousels dat ten select co mas ve where pres inner join?
Tj.
update
...
set
...
from
...
inner join (select ...) on ...
Ryzen 7 5700X + Wraith Prism RGB, Sapphire Pulse Radeon 9070 16GB, ASUS PRIME X470-PRO, Patriot Viper 4 32GB DDR4 3000Mhz, 3,5TB SSD, Seasonic Focus GX 650, Montech Air 903 Max, Dell U3023E
PC2: Mac mini M2 Pro + Xbox Series X&S + ThinkPad T14 Gen 5 AMD
Odpovědět

Zpět na „Programování a web“