powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ошибка "subquery returns more than 1 row" в "after update" триггере
8 сообщений из 8, страница 1 из 1
Ошибка "subquery returns more than 1 row" в "after update" триггере
    #40134331
trepol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть две таблицы, test1 и test2, данные в test2 зависят от данных в test1 и я создал триггер after update который после изменения данных в test1 обновляет test2
Все работает если у меня в таблице всего 1 строка, тогда триггер срабатывает, но если строк больше одной, тогда выдает ошибку subquery returns more than 1 row
Вот сам триггер:

Код: plsql
1.
2.
3.
CREATE DEFINER=`root`@`localhost` TRIGGER `afupd_yzv2` AFTER UPDATE ON `test1` FOR EACH ROW BEGIN 
    UPDATE `database`.`test2` SET `value1` = (select value1 from test1) * 2 WHERE (`id` = (select id from test1));
END



Помогите пожалуйста, что можно сделать чтобы я мог работать с множеством строк, а не с одной?
...
Рейтинг: 0 / 0
Ошибка "subquery returns more than 1 row" в "after update" триггере
    #40134334
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trepol
что можно сделать

Забыть навсегда про подзапросы в подобных случаях и использовать многотабличный UPDATE.
...
Рейтинг: 0 / 0
Ошибка "subquery returns more than 1 row" в "after update" триггере
    #40134342
trepol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

А можете привести пожалуйста пример с этим многотабличным update? Даже не слышал про такое и не понимаю как тут это должно выглядеть
...
Рейтинг: 0 / 0
Ошибка "subquery returns more than 1 row" в "after update" триггере
    #40134356
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trepol ,
https://dev.mysql.com/doc/refman/8.0/en/update.html Multiple-table syntax :

Код: sql
1.
2.
3.
UPDATE [LOW_PRIORITY] [IGNORE] table_references
    SET assignment_list
    [WHERE where_condition]
...
Рейтинг: 0 / 0
Ошибка "subquery returns more than 1 row" в "after update" триггере
    #40134431
LiYing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
trepol
А можете привести пожалуйста пример с этим многотабличным update? Даже не слышал про такое и не понимаю как тут это должно выглядеть

MySQL, update multiple tables with one query
...
Рейтинг: 0 / 0
Ошибка "subquery returns more than 1 row" в "after update" триггере
    #40134482
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trepol
У меня есть две таблицы, test1 и test2, данные в test2 зависят от данных в test1 и я создал триггер after update который после изменения данных в test1 обновляет test2
Все работает если у меня в таблице всего 1 строка, тогда триггер срабатывает, но если строк больше одной, тогда выдает ошибку subquery returns more than 1 row
Вот сам триггер:

Код: plsql
1.
2.
3.
CREATE DEFINER=`root`@`localhost` TRIGGER `afupd_yzv2` AFTER UPDATE ON `test1` FOR EACH ROW BEGIN 
    UPDATE `database`.`test2` SET `value1` = (select value1 from test1) * 2 WHERE (`id` = (select id from test1));
END



Помогите пожалуйста, что можно сделать чтобы я мог работать с множеством строк, а не с одной?


У вас в одном или в обоих местах вместо одной записи (значения) возвращается множество.
Для простоты прилепите к каждому LIMIT 1

Код: sql
1.
UPDATE `database`.`test2` SET `value1` = (select value1 from test1 LIMIT 1) * 2 WHERE (`id` = (select id from test1 LIMIT 1));
...
Рейтинг: 0 / 0
Ошибка "subquery returns more than 1 row" в "after update" триггере
    #40135412
VDeltsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
trepol, на My SQL никогда триггеры не писал, но полагаю, что проблема в том, что внутри триггера Вы обращаетесь не к таблице с изменяемыми значениями, а вообще ко всей таблице test1.
В MS SQL для этого в триггере есть дополнительные таблицы inserted и updated. Вот тут надо было бы использовать inserted.

Но у вас тут триггер по одной строке. Судя по документации тут вообще другой синтаксис
https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html

Будет что-то типа:

UPDATE database.test2 SET test2.value1 = NEW.value1 * 2 WHERE test2.id = NEW.id;

где NEW - этот объект измененной строки (а не таблица строк).
...
Рейтинг: 0 / 0
Ошибка "subquery returns more than 1 row" в "after update" триггере
    #40135424
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trepol
У меня есть две таблицы, test1 и test2

Структуры обеих таблиц (полные неизменённые CREATE TABLE) в студию.

trepol
данные в test2 зависят от данных в test1

Как именно? Пример данных в таблицах (в виде INSERT INTO), и подробное пояснение, где, что, от чего и как именно зависит - со ссылками на конкретные записи и значения.

trepol
что можно сделать чтобы я мог работать с множеством строк, а не с одной?

К всему, что выше - INSERT INTO в первую таблицу и требуемое после его выполнение состояние данных в обеих таблицах.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ошибка "subquery returns more than 1 row" в "after update" триггере
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]