触发mysql未知表

时间:2016-07-25 20:23:35

标签: mysql triggers

我一直试图解决这个问题。这是代码:

CREATE TRIGGER some_trigger AFTER UPDATE ON table_a
    FOR EACH ROW BEGIN
    DECLARE tname VARCHAR(20);
     IF (table_a.field_offer=1) THEN
      SET tname='table_b';
    ELSEIF (table_a.field_offer=0) THEN
      SET tname='table_c'; 
    END IF;   
      IF ((new.field_state = 0)) THEN
       UPDATE tname join table_a on tname.ID=table_a.ref_field
       SET tname.STOCK = tname.STOCK -1;
      ELSEIF ((new.field_state = 1)) THEN
       UPDATE tname join table_a on tname.ID=table_a.ref_field
       SET tname.STOCK = tname.STOCK +1;
      END IF;  
    END;

我得到了:

  

未知表格&table; a'在字段列表中。 Field_offer和field_state可以   是空的。

1 个答案:

答案 0 :(得分:0)

我已在下面显示了对该问题的评论中所说的内容:

CREATE TRIGGER some_trigger AFTER UPDATE ON table_a
    FOR EACH ROW BEGIN
    DECLARE tname VARCHAR(20);
    IF (NEW.field_offer=1) THEN
       UPDATE `table_b` 
       SET STOCK = CASE NEW.field_state 
                   WHEN 0 THEN STOCK - 1 
                   WHEN 1 THEN STOCK + 1 
                   ELSE STOCK 
                   END
       WHERE ID=NEW.ref_field
       ;
    ELSEIF (NEW.field_offer=0) THEN
       UPDATE `table_c` 
       SET STOCK = CASE NEW.field_state 
                   WHEN 0 THEN STOCK - 1 
                   WHEN 1 THEN STOCK + 1 
                   ELSE STOCK 
                   END
       WHERE ID=NEW.ref_field
       ;
    END IF;
    ...

请注意,我更改了UPDATE ... JOIN的更新,因为MySQL不允许您更改触发表的数据;虽然你实际上并没有更新table_a,但是JOIN可能足以让MySQL反对...那个连接会更新table_b/ctable_a匹配的每一行,而不是只有table_a行与触发器中的值或行相关。