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