【问题标题】:Mysql: what to use instead of WITH statement or TEMPORARY tables?Mysql:用什么代替 WITH 语句或 TEMPORARY 表?
【发布时间】:2022-01-08 13:31:33
【问题描述】:

有没有办法将选择查询存储到表中?我通常使用 WITH 语句 但这仅适用于 mysql 8+。我目前正在使用 mysql 5.1。因此,我尝试实现一个临时表,但不能在同一个查询中多次引用一个临时表(如下面的查询)。

CREATE TEMPORARY TABLE test
SELECT  TIMESTAMPDIFF(MONTH, MAX(L.period), CURDATE()) as timediff, L.contractID 
FROM license L GROUP BY L.contractID;

UPDATE `contract` AS C
SET C.valid = CASE
WHEN (SELECT timediff FROM test AS T WHERE T.contractID = C.contractID) < 1 THEN 2
WHEN (SELECT timediff FROM test AS T WHERE T.contractID = C.contractID) = 1 THEN 1
WHEN (SELECT timediff FROM test AS T WHERE T.contractID = C.contractID) > 1 THEN 0
END;

DROP TEMPORARY TABLE test;

【问题讨论】:

  • 这里根本不需要临时表,只需使用 派生表 进行 license 查询并加入即可。跨度>

标签: mysql temp-tables


【解决方案1】:

您可以通过将更新表述为联接来立即解决您的问题:

UPDATE contract c
INNER JOIN test t
    ON t.contractID = c.contractID
SET valid = CASE WHEN t.timediff < 1 THEN 2
                 WHEN t.timediff = 1 THEN 1
                 ELSE 0 END;

这种方法解决了多次引用临时表的问题。

【讨论】:

  • 太棒了。这是一个很好的解决方法,看起来好多了!
猜你喜欢
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-26
  • 2019-09-16
  • 2023-02-23
  • 2011-04-18
相关资源
最近更新 更多