2014-02-18 30 views
0

我有一個MySQL 5.5觸發器,由於返回多個結果而失敗。問題是,我試圖通過使用唯一字段'id'字段一次返回一個結果。MySQL觸發器返回多行

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

你不應該巢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語句不能處理這個問題。上述修復了這個問題。

如果你只想要一個行,添加一個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; 
+0

所以這個問題似乎是SELECT的VALUES語句內嵌套。你的答案的第一部分解決了這個問題。返回多個結果沒有任何問題,因爲a.id保證是唯一的,只返回1個結果。錯誤信息或我的解釋是關閉的。謝謝您的幫助! – user387049