2013-05-14 4 views
0

Мне нужно удалить строки из таблицы ответов после обновления таблицы вопросов, но я получаю эту ошибку: sub query возвращает более одной строки. Есть ли способ, чтобы заставить его работать?MySQL: вспомогательный запрос возвращает более одной строки

CREATE TRIGGER delete_responses AFTER UPDATE ON questions 
FOR EACH ROW 
BEGIN 
IF NEW.active != OLD.active 
THEN DELETE FROM responses WHERE option_id = (
SELECT option_id 
FROM options 
WHERE question_id = OLD.question_id); 

ответ

0

Изменение = к = ANY или in:

CREATE TRIGGER delete_responses AFTER UPDATE ON questions 
FOR EACH ROW 
BEGIN 
IF NEW.active != OLD.active 
THEN DELETE FROM responses WHERE option_id in (
SELECT option_id 
FROM options 
WHERE question_id = OLD.question_id); 
0

Использование "в":

CREATE TRIGGER delete_responses AFTER UPDATE ON questions 
FOR EACH ROW 
BEGIN 
IF NEW.active != OLD.active 
THEN DELETE FROM responses WHERE option_id in (
SELECT option_id 
FROM options 
WHERE question_id = OLD.question_id); 

или ограничить подзапрос так, что он возвращает только одну строку.

1

Да, используйте JOIN вместо:

DELETE r 
FROM responses AS r 
INNER JOIN options AS o ON r.option_id = o.option_id 
WHERE o.question_id = OLD.question_id; 
0

Вы можете ограничить результаты вашего подзапроса 1 пределом или различны, или если вы ней- удалить все обоснованные результаты в подзапроса вам нужно использовать WHERE id IN (....)

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