[英]MySQL, CONCAT in SELECT statement
(SELECT CONCAT(@I, '_Delta') FROM table WHERE id_tb = @ID)
I'm using the above statement as part of an INSERT. 我将上面的语句用作INSERT的一部分。 The problem is the whole line is being translated to the value of
@I
(this is an index, values are ie 0, 1, 2, ...). 问题是整行都被转换为
@I
的值(这是一个索引,值即0、1、2,...)。 So, instead of getting the output of the SELECT I'm getting 0, 1, 2, ... 因此,不是获取SELECT的输出,而是获取0、1、2 ...
The expected value of the CONCAT is like "0_Delta"
, then "1_Delta"
, etc. Replacing the CONCAT by one of this works. CONCAT的期望值是
"0_Delta"
,然后是"1_Delta"
,等等。用其中一项替代CONCAT。
Any comments will be appreciated. 任何意见将不胜感激。 Thanks!
谢谢!
[code] [码]
DROP TABLE IF EXISTS xxx_tb; 如果存在则删除表xxx_tb; CREATE TABLE xxx_tb ( i_Validity INT, Delta INT );
创建表xxx_tb(i_Validity INT,Delta INT);
DROP TRIGGER IF EXISTS AFTER_INSERT_ON_tb_in; 如果存在AFTER_INSERT_ON_tb_in,则触发DROP; DELIMITER $$ CREATE TRIGGER AFTER_INSERT_ON_tb_in AFTER INSERT ON tb_in FOR EACH ROW BEGIN
DELIMITER $$为每个行开始在tb_in上插入AFTER_INSERT_ON_tb_in之后创建触发器
SET @ID = NEW.id_tb;
SET @TYPE = (SELECT Type FROM header WHERE id_tb = @ID);
IF @TYPE = 'abcd' THEN
SET @SAMPLES = (SELECT SampleNumber FROM table WHERE id_tb = @ID);
IF(@SAMPLES > 1) THEN
SET @I = 0;
WHILE(@I < @SAMPLES) DO
INSERT INTO xxx_tb
(
i_Validity,
Delta
)
VALUES
(
(SELECT 0_Validity FROM table WHERE id_tb = @ID),
(SELECT CONCAT(@I, '_Delta') FROM table WHERE id_tb = @ID)
);
SET @I = @I + 1;
END WHILE;
END IF;
END IF;
END$$
DELIMITER ; 定界符; [code]
[码]
delta
is declared as an integer. delta
被声明为整数。 You are getting a silent conversion from the string value. 您正在从字符串值获得静默转换。 Because
@i
is at the beginning, that is the value you are getting. 因为
@i
是开头,所以这就是您获得的值。
You can try declaring it as varchar(255)
if you want a string value. 如果需要字符串值,可以尝试将其声明为
varchar(255)
。
Your insert
can be written more easily as an insert . . . select
您的
insert
可以更容易地作为insert . . . select
编写insert . . . select
insert . . . select
insert . . . select
: insert . . . select
:
INSERT INTO xxx_tb(i_Validity, Delta)
SELECT `0_Validity`, CONCAT(@I, '_Delta')
FROM table WHERE id_tb = @ID);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.