MySQL Trigger返回多行

时间:2014-02-18 16:07:33

标签: mysql triggers mysql-5.5

我有一个MySQL 5.5触发器,由于返回了多个结果而失败。问题是,我试图通过使用唯一字段'id'字段一次返回一个结果。

CREATE TRIGGER insert_com_app_title AFTER INSERT
ON com_apps FOR EACH ROW 
INSERT IGNORE INTO com_myisam_app_titles(id_company, title) VALUES((SELECT a.id_company, b.title FROM com_apps a JOIN epf_application b ON a.application_id = b.application_id WHERE NEW.id = a.id));

(相关)表结构如下:

**com_apps**
id, id_company, application_id

**com_myisam_app_titles**
id_company, title

**epf_application**
application_id, title

我假设New.ID有问题,但即使值错误,com_apps的id字段也是PRIMARY自动递增键,所以即使在这种情况下我也会返回一个不正确的结果。

1 个答案:

答案 0 :(得分:1)

您不应将select嵌套在values语句中。 SQL提供了更好的语法:

INSERT IGNORE INTO com_myisam_app_titles(id_company, title) 
    SELECT a.id_company, b.title
    FROM com_apps a JOIN
         epf_application b
         ON a.application_id = b.application_id
    WHERE NEW.id = a.id;

问题是底层查询返回多行,values语句无法处理。以上解决了这个问题。

如果您只想要一行,请在查询中添加limit 1

INSERT IGNORE INTO com_myisam_app_titles(id_company, title) 
    SELECT a.id_company, b.title
    FROM com_apps a JOIN
         epf_application b
         ON a.application_id = b.application_id
    WHERE NEW.id = a.id
    LIMIT 1;