Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann ich JOIN in der UPDATE-Anweisung verwenden?

Ich denke, das sollte es tun:

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

Das erste JOIN filtert nach den Antworten auf dieselbe Frage wie die akzeptierte Antwort.

Der zweite JOIN findet diese Frage.

Das WHERE Klausel beschränkt die Aktualisierung nur auf Fragen mit dem angegebenen Autor und gibt die akzeptierte Antwort-ID an.

DEMO

Fügen Sie für die zusätzliche Bedingung

hinzu
AND (ques.free IS NULL or ans1.accepted IS NULL)

zum WHERE Klausel. ques.free IS NULL stimmt mit jeder freien Frage überein und ans1.accepted IS NULL entspricht einer Frage ohne akzeptierte Antwort (denn wenn eine Antwort akzeptiert wird, erhalten alle anderen Antworten auf diese Frage accepted = 0 ).

DEMO der Frage ohne akzeptierte Antwort
Kostenlose DEMO der Frage