使用带有 ORDER BY 和 LIMIT 的 INNER JOIN 的 MySQL 更新

标签 mysql sql sql-order-by inner-join limit

我正在尝试使用带有限制和排序依据的内部连接进行更新(尽管排序依据不是必需的。从我读到的内容来看,标准更新将不起作用...这就是我正在尝试的做:

UPDATE table1
INNER JOIN table2
ON table1.service_id=table2.service_id
SET table1.flags = NULL
WHERE table1.type = 'fttc'
AND table1.flags = 'co'
AND table2.sync not like '%Yes%'
AND table1.date >= $today_date
ORDER BY table1.priority ASC
LIMIT 20;

它用于案例管理工具并使用 php,我想更新 20 张票,即删除“标志”以便它们可以工作,数量将作为变量传递,所以我想更新 20例如最高“优先级”的票,如果可以的话?

最佳答案

如果我没看错你的问题,你想对连接产生的前 20 条记录执行更新,使用优先级作为排序。您不能直接在 MySQL AFAIK 的 UPDATE 中执行此操作,但您可以创建一个可更新的 View ,然后对其进行更新。

CREATE VIEW yourView
AS
SELECT
    t1.service_id,
    t2.service_id,
    t1.flags,
    t1.type,
    t1.date,
    t1.priority,
    t2.sync
FROM table1 t1
INNER JOIN table2 t2
    ON t1.service_id = t2.service_id
WHERE t1.type = 'fttc'         AND
      t1.flags = 'co'          AND
      t2.sync NOT LIKE '%Yes%' AND
      t1.date >= $today_date
ORDER BY t1.priority
LIMIT 20;

然后更新这个 View :

UPDATE yourView
SET flags = NULL

关于使用带有 ORDER BY 和 LIMIT 的 INNER JOIN 的 MySQL 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43449102/

相关文章:

java - 提高大数据量插入速度

php - MySQL的排序规则仅用于排序吗?

mysql - 即使在 MYSQL LEFT JOIN 中存在 Join 之后,如何带 NULL 值

MYSQL 按天排序埋在字符串中

mysql - H2 "runscript"命令将所有表名转为大写

mysql - 我想显示最高的号码。剧集数

php - 成功登录后如何将用户重定向到新的 PHP 页面?

mysql - SQL 返回重复值

MySQL:ORDER BY 与 RANGE 查询,性能不佳

mysql - 如何让 MySQL 5.5 中的工作查询在 MySQL 5.7 中工作?