Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como posso usar JOIN na instrução UPDATE?


Eu acho que isso deve fazer isso:
UPDATE QandA AS ans1
JOIN QandA AS ans2 ON ans2.related = ans1.related
JOIN QandA AS ques ON ans2.related = ques.id
SET ans1.accepted = (ans1.id = :answer_id)
WHERE ques.author_id = :session_id
AND ans2.id = :answer_id

O primeiro JOIN filtra até as respostas para a mesma pergunta que a resposta que está sendo aceita.

O segundo JOIN encontra essa pergunta.

O WHERE A cláusula restringirá a atualização apenas a perguntas com o autor fornecido e especifica o ID de resposta que está sendo aceito.

DEMO

Para a condição adicional, adicione
AND (ques.free IS NULL or ans1.accepted IS NULL)

para WHERE cláusula. ques.free IS NULL corresponde a qualquer pergunta gratuita e ans1.accepted IS NULL corresponde a uma pergunta sem resposta aceita (porque quando uma resposta é aceita, todas as outras respostas a essa pergunta são accepted = 0 ).

DEMO de pergunta sem resposta aceita
DEMO da pergunta que é grátis