2013-05-14 169 views
0

我需要在更新問題表後刪除響應表中的行,但出現此錯誤:子查詢返回多個行。有沒有辦法讓它工作?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

更改== ANYin

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,或者如果你ened刪除子查詢所有創立的結果,你需要使用WHERE id IN (....)