MySQL,CONCAT中的SELECT语句

时间:2014-09-23 01:13:32

标签: mysql

(SELECT CONCAT(@I, '_Delta') FROM table WHERE id_tb = @ID)

我使用上述语句作为INSERT的一部分。问题是整行被转换为@I的值(这是一个索引,值是0,1,2,......)。所以,而不是得到SELECT的输出我得到0,1,2,......

CONCAT的预期值类似于"0_Delta",然后是"1_Delta"等。用其中一个替换CONCAT就可以了。

任何意见将不胜感激。谢谢!

[代码]

DROP TABLE IF EXISTS xxx_tb; CREATE TABLE xxx_tb (     i_Validity INT,     Delta INT );

DROP TRIGGER IF EXISTS AFTER_INSERT_ON_tb_in; DELIMITER $$ 创建TRIGGER AFTER_INSERT_ON_tb_in     在插入tb_in之后     对于每一行     BEGIN

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; [代码]

1 个答案:

答案 0 :(得分:0)

delta被声明为整数。您正在从字符串值获得静默转换。因为@i位于开头,所以这就是你得到的价值。

如果您想要字符串值,可以尝试将其声明为varchar(255)

insert可以更轻松地编写insert . . . select

    INSERT INTO xxx_tb(i_Validity, Delta) 
        SELECT `0_Validity`, CONCAT(@I, '_Delta')
        FROM table WHERE id_tb = @ID);