【问题标题】:Doing an INSERT INTO tableA with sub-SELECT on tableB sorted with ON DUPLICATE KEY UPDATE在使用 ON DUPLICATE KEY UPDATE 排序的表上执行带有 sub-SELECT 的 INSERT INTO 表
【发布时间】:2011-01-29 08:01:24
【问题描述】:

我有一个表 tableA,我想使用它,然后将每个结果行插入/更新到 tableB 中。目前我有这样的事情:

delete from tableB;
set @place = 0;
INSERT INTO tableB (id, place, name, colD, colF) SELECT (id, greatest(@place := @place + 1, 0) from tableA order by colD desc;

这可行,但我不想每次都从 tableB 中删除,因为该表可能包含数十万行。所以,我想使用 ON DUPLICATE KEY UPDATE,因为每个 id 列都设置为 PRIMARY KEY。我尝试了以下各种版本(移动 ON DUPLICATE KEY UPDATE 子句)

INSERT INTO tableB (id, place, name, colD, colF) SELECT (id, greatest(@place := @place + 1, 0) from tableA order by colD desc ON DUPLICATE KEY UPDATE tableB.place = @place, tableB.name = tableA.name, tableB.colD = tableA.colD, tableB.colF = tableA.colF;

运气不好,

关于如何做到这一点的任何指示?

【问题讨论】:

  • 度假村是什么意思? RDB 没有排序,您可以在您的选择查询中排序,并通过使用索引来支持这一点

标签: mysql


【解决方案1】:

为什么不为此目的使用视图?

create view tableb as 
SELECT (id, greatest(@place := @place + 1, 0) from tableA order by colD desc;

这样会少一些问题,因为它会自动更新。

MySQL documentation

【讨论】:

    猜你喜欢
    • 2011-01-29
    • 2017-02-21
    • 1970-01-01
    • 2022-08-02
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    相关资源
    最近更新 更多