2017-11-13 2 views
0

In meiner Mysql Datenbank Ich möchte ein Feld aktualisieren fup für alle Datensätze, die ich mit dieser select-Anweisung gefunden:Wie UPDATE-Abfrage mit Unterabfrage kombinieren?

SELECT ic.hash 
FROM incompany as ic, app 
WHERE ic.id = app.ic_id; 

Also habe ich die folgende kombinierte Abfrage:

UPDATE incompany 
SET fup = 'x' 
WHERE hash IN (SELECT ic.hash 
FROM incompany as ic, app 
WHERE ic.id = app.ic_id); 

Aber diese Abfrage gibt mir folgende Fehlermeldung:

You can't specify target table 'incompany' for update in FROM clause

Weiß jemand, wie ich diese Arbeit machen kann? Alle Tipps sind willkommen!

+1

Möglicherweise ein Duplikat: https://stackoverflow.com/questions/4429319/you-cant-specify-target-table-for-update-in-from-clause# 14302701 – hage

Antwort

2

Sie scheinen eine Bedingung auf zwei Spalten wollen, so ist dies ein bisschen schwierig. Wenn ich die Logik richtig folgen:

UPDATE incompany ic JOIN 
     (SELECT DISTINCT ic.hash 
     FROM incompany ic JOIN 
      app 
      ON ic.id = app.ic_id 
     ) ica 
     ON ica.hash = ic.hash 
    SET fup = 'x' ; 
1

Sie benötigen keine Unterabfrage. Sie könnten INNER JOIN verwenden, um die Kriterien für die Verknüpfung der Tabelle incompany mit der Tabelle app und dem anderen Alias ​​für die Tabelle incompany festzulegen.