2016-08-01 97 views
0

Ich bin auf der Suche nach einer einfachen Möglichkeit, ein Update für eine Tabelle nur dann, wenn keine anderen Spalten in der gleichen Tabelle mit dem gleichen Wert, den ich versuche zu aktualisieren, idealerweise in einem einzelne Abfrage. Bis jetzt bekomme ich einen Fehler You specify target table 't1' for update in FROM clause. Hier ist, was ich in ein paar Variationen versucht, bisher (noch nicht zum Laufen bringen):MySQL Conditional Update in der gleichen Tabelle

UPDATE emailQueue AS t1 
SET 
    t1.lockedOn = 1470053240 
WHERE 
    (SELECT 
      COUNT(*) 
     FROM 
      emailQueue AS t2 
     WHERE 
      t2.lockedOn = 1470053240) = 0 
     AND t1.lockedOn IS NULL 
+0

Mögliches Duplikat [wie Datenbank sequentiell aktualisieren mit mysql] (http://stackoverflow.com/questions/38693492/how-to-update-database-sequentially -use-mysql) – e4c5

+0

@ e4c5 ernsthaft gibt es keinen Weg um dies zu tun? –

+0

Sie müssen einen Join verwenden, wie in der Frage erwähnt und von @ Gordon-linoff als Antwort – e4c5

Antwort

2

In MySQL, benötigen Sie ein join verwenden. In diesem Fall ist ein left join um:

UPDATE emailQueue eq LEFT JOIN 
     emailQueue eq2 
     ON eq2.lockedOn = 1470053240 
    SET eq.lockedOn = 1470053240 
WHERE eq.lockedOn IS NULL AND 
     eq2.lockedOn IS NULL; 
+0

Ich bin mir nicht sicher, ob ich genau verstehe, wie das funktioniert, aber es funktioniert irgendwie. Mehr Erklärung in der Antwort könnte nützlich sein :) –