UPDATE 只有一行(使用更新和连接)

Abd*_*lia 6 mysql join update limits

我正在尝试获得一个快速、简单的 sql 查询,以便在使用 join 时一次只更新一行。

我试过了LIMIT,但没有成功。

询问:

UPDATE
table1
JOIN
table2 ON table2.col=table1.col
SET 
table1.row1='a value'
WHERE
table1.row2 LIKE '%something%' 
LIMIT 1
Run Code Online (Sandbox Code Playgroud)

信息:

错误代码:1221. UPDATE 和 LIMIT 的错误用法

ype*_*eᵀᴹ 7

LIMITUPDATEhas join时不允许。但是,您可以将连接和LIMIT内部移动到子查询中,然后连接回要使用主键或唯一键更新的表。这是允许的:

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' ;
Run Code Online (Sandbox Code Playgroud)

ORDER BY与一起使用也很好LIMIT。否则将选择任意行。


如果您想更新两个表(每个表中的一行),那么您只需要将派生表也连接到第二个表:

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' ;
Run Code Online (Sandbox Code Playgroud)

reextester.com 上测试