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 的错误用法
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)
| 归档时间: |
|
| 查看次数: |
11823 次 |
| 最近记录: |