gpt4 book ai didi

mysql - SQL - 将用户定义的变量添加到表(mysql)?

转载 作者:行者123 更新时间:2023-11-29 07:36:00 25 4
gpt4 key购买 nike

所以我有这个代码,它是存储过程的一部分:

SET @MID = 0;
SET @MX = 0;
SET @MY = 0;
SET @MT = 0;
SET @CSTAMP = '2014-6-06 08:03:19';



SELECT @MID=m.ID, @MX=m.x , @MY=m.y , @MT=m.timestamp FROM movement m
WHERE m.ID = cSID
AND m.timestamp = (SELECT MAX(T.timestamp)
FROM (SELECT mm.timestamp FROM movement mm WHERE mm.ID = cSID AND mm.timestamp <= @CSTAMP)AS T);



INSERT INTO DBTable(`ctimestamp`,`ID`,`x`,`y`,`mtimestamp`)
VALUES(ctstamp,@MID,@MX,@MY,@MT);

基本上,它创建一些用户定义的变量,在查询中为它们分配值,并尝试将它们插入到名为 DBTable 的表中,其中包含列 ctimestamp,IDxymtimestamp。问题是,当我在查询后看到 DBTable 时,列 IDxymtimestamp 全部为空(只有 0),只有 ctimestamp 填充了游标变量 ctstamp 中的值。

我不知道这里出了什么问题...我插入表的方式是错误的吗?我可以不以这种方式插入像 @variable_name 这样的变量吗?

任何帮助将不胜感激,谢谢!

编辑

我只是有一个想法,由于用户定义的变量是特定于 session 的,这是否意味着我无法退出客户端并关闭计算机并让数据库服务器运行其余的查询?抱歉,如果这看起来是个愚蠢的问题,但我对存储过程和 SQL 很陌生。

最佳答案

在 SELECT 语句中,对用户定义变量的赋值使用(类似 pascal 的)赋值运算符 (:=),而不仅仅是等号。

例如,这会将值 'foo' 赋值给用户定义的变量:

  SELECT @var := 'foo'
^

这与此有很大不同:

  SELECT @var = 'foo'
^

执行任务;它被评估为 bool 表达式,相等比较的结果返回0、1或NULL。

<小时/>

跟进

不需要所有这些用户定义的变量。您可以更有效地完成相同的结果(使用更少的 SQL 语句)

假设 cSID 是一个过程变量,您只需使用以下命令即可获得等效结果:

  SET @CSTAMP = '2014-6-06 08:03:19';

INSERT INTO DBTable(`ctimestamp`,`ID`,`x`,`y`,`mtimestamp`)
SELECT t.ctimestamp, m.ID, m.x, m.y, m.timestamp AS mtimestamp
FROM movement m
JOIN ( SELECT @CSTAMP + INTERVAL 0 DAY AS ctimestamp
, MAX(mm.timestamp) AS max_mm_timestamp
FROM movement mm
WHERE mm.ID = cSID
AND mm.timestamp <= @CSTAMP + INTERVAL 0 DAY
) t
ON m.ID = cSID
AND m.timestamp = t.max_mm_timestamp
ORDER BY 3,4
LIMIT 1

(用户定义的变量@CSTAMP可以用过程变量替换。

  DECLARE v_cstamp DATETIME DEFAULT '2014-06-06 08:03:19';

然后将对 @CSTAMP 的引用替换为对过程变量的引用...v_cstamp

关于mysql - SQL - 将用户定义的变量添加到表(mysql)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30810411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com