2014-02-18 2 views
0

У меня есть MySQL 5.5 Trigger, который не работает из-за возврата нескольких результатов. Проблема в том, что я пытаюсь вернуть один результат за раз, используя поле «id» для уникального поля.MySQL Trigger возвращает несколько строк

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)); 

The (соответствующая) структура таблицы выглядит следующим образом:

**com_apps** 
id, id_company, application_id 

**com_myisam_app_titles** 
id_company, title 

**epf_application** 
application_id, title 

Я предполагаю, что что-то не так с New.ID, однако, даже если значение неверно поле идентификатор com_apps является ПЕРВИЧНЫЙ автоинкрементный ключ, поэтому даже в этом случае я вернул бы один неверный результат.

ответ

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; 
+0

Так что вопрос, казалось, нестинг SELECT, в заявлении VALUES. Первая часть вашего ответа разрешила проблему. Не было ничего плохого в возвращении нескольких результатов, так как a.id гарантированно будет уникальным и будет возвращен только 1 результат. Сообщение об ошибке или моя интерпретация - это то, что было отключено. Спасибо за помощь! – user387049

Смежные вопросы