2013-05-14 2 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

변경 == 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 (....)를 사용할 필요가

관련 문제