0

我有一个 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 自动递增键,所以即使在这种情况下,我也会返回一个不正确的结果。

4

1 回答 1

1

您不应该嵌套selectvalues语句中。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语句无法处理。以上解决了这个问题。

如果您只想要一行,请将 a 添加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;
于 2014-02-18T16:13:02.583 回答