选择变量中引用的列

时间:2013-04-29 21:29:43

标签: mysql triggers

我目前正在开发一个MySQL 触发器 (这很重要,因为这排除了PREPARE/EXECUTE组合)获取了神奇宝贝的类型并查找了它与另一种类型的亲和力。这是我正在使用的触发器的片段:

select `type1`,`type2` into @t1,@t2
    from `data_pokemon` where `formeid`=new.`formeid`;
set @t3 = 'electric'; -- actually obtained from another select query
set @q = concat(
    'select `',@t1,'`',
    if(@t2 is null,'/2',concat('*`',@t2,'`/4')),
    ' into @aff from `data_types` where `attack`=?'
);
prepare tmp from @q;
execute tmp using @t3;
deallocate prepare tmp;

现在,正如我所提到的,这是一个触发器。因此,上述代码将无效。

我真正能做的是一种选择行的方法,然后将其视为某种关联数组,因此我可以访问@typerow[@t1]。这样的事情存在吗?

1 个答案:

答案 0 :(得分:1)

我认为你最接近的是一个巨大的案例陈述:

select (case when @t1 = 'col1' then col1
             when @t1 = 'col2' then col2
        . . .
        end
       ) . . .

有一点需要注意,这会将所有列转换为相同的类型。