it-swarm.com.de

UPDATE Nur eine Zeile (mit Update und Join)

Ich versuche, eine schnelle, einfache SQL-Abfrage zu erhalten, um jeweils nur eine Zeile zu aktualisieren, während ich auch join verwende.

Ich habe LIMIT versucht, aber ohne Erfolg.

Abfrage:

UPDATE
table1
JOIN
table2 ON table2.col=table1.col
SET 
table1.row1='a value'
WHERE
table1.row2 LIKE '%something%' 
LIMIT 1

Botschaft:

Fehlercode: 1221. Falsche Verwendung von UPDATE und LIMIT

5

LIMIT ist nicht zulässig, wenn UPDATE Verknüpfungen hat. Sie können jedoch den Join und das LIMIT in eine Unterabfrage verschieben und dann mit dem Primärschlüssel oder einem eindeutigen Schlüssel wieder zur Tabelle zurückkehren, um sie zu aktualisieren. Dies ist erlaubt:

UPDATE table1 AS upd
  JOIN
    ( SELECT t1.pk
      FROM table1 AS t1
        JOIN
           table2 AS t2 ON t2.col = t1.col
      WHERE t1.row2 LIKE '%something%' 
      -- ORDER BY some_expressions
      LIMIT 1
    ) AS sel
    ON sel.pk = upd.pk
SET 
   upd.row1 = 'a value' ;

Es ist auch gut, ORDER BY Mit LIMIT zu verwenden. Andernfalls wird eine beliebige Zeile ausgewählt.


Wenn Sie beide Tabellen aktualisieren möchten (jeweils eine Zeile), müssen Sie nur die abgeleitete Tabelle mit der zweiten Tabelle verbinden:

UPDATE 
    ( SELECT t1.pk AS pk1,                     -- The PK columns 
             t2.pk AS pk2                      -- of each table
      FROM table1 AS t1
        JOIN
           table2 AS t2 ON t2.col = t1.col
      WHERE t1.row2 LIKE '%something%' 
      -- ORDER BY some_expressions
      LIMIT 1
    ) AS sel
  JOIN table1 AS upd1  ON sel.pk1 = upd1.pk    -- join table1    
  JOIN table2 AS upd2  ON sel.pk2 = upd2.pk    -- join table2
SET 
   upd1.row1 = 'a value',
   upd2.roww = 'some other value' ;

Test bei rextester.com

7
ypercubeᵀᴹ