2012-11-28 3 views
2

에는 하위 쿼리가없는 이유는 함수 여기MYSQL 기능 "오류 코드 : 1242 하위 쿼리는 1 개 이상의 행을 반환"하지만 난 문제가 무엇인지 모르는

을 실행하는 나에게 오류를 제공하는 것은 내 SQL입니다 :

CREATE FUNCTION `test`.`GetProcessorMethodID` (processor_id INT, method_id INT) 
RETURNS INTEGER 
BEGIN 
    DECLARE id INT; 
    SET @id := (SELECT `processor_method_id` FROM `processor_method` WHERE `processor_id` = processor_id AND `method_id` = method_id); 
RETURN @id; 
END 
enter image description here

하지만 SQL

SELECT processor_method_id FROM test.processor_method 
WHERE processor_id = 1 AND method_id = 2; 

0이 줄을 사용할 때

제대로 작동합니다. 그것은 얻고 싶지만 기대하는 가치를 제공합니다. 하지만 내 기능에 내 예상 값을 반환 항상 나에게 오류를 제공하고 내가 잘못이 무엇인지 모르는하지 않습니다

+0

두 번째 예제가 둘 이상의 값을 반환합니까? 오류 메시지의 잘못된 부분에 집중하고 있다고 생각합니다. – Madbreaks

+0

그것은 단지 하나의 값을 반환합니다 .. – GrayFullBuster

+0

나는 더 명확한 감사를 만들기 위해 몇 가지 스크린 샷을 추가했습니다! :) – GrayFullBuster

답변

7

귀하의 문제는 실제로 매우 간단하고 나중에 그것을 기억 확실히했던거야 ... processor_id에서 ... 당신의 매개 변수 이름을 변경 parmProcessor 같은 것으로 method_id IT 약자로, 현재 매개 변수 당신이 쿼리하는 열 이름과 동일한 이름이며, 따라서

where `processor_id` = processor_id (same with method) 

는 BOT 있으며,

을 parmMethod H는 실제 열 이름을 나타내고 1 = 하루 종일 1, 2 = 2 일 때마다 모든 레코드를 가져옵니다. 쿼리에 명시 적으로 DIFFERENT 의미입니다

where `processor_id` = parmProcessor and `method_id` = parmMethod 

을 얻을 것입니다 당신이 위의 샘플로 약간 다른 무언가로 변경하여

.

+0

Ahh. 감사! 이제 작동합니다! :) – GrayFullBuster

1

쿼리

SET @id := (SELECT `processor_method_id` FROM `processor_method` WHERE `processor_id` = processor_id AND `method_id` = method_id); 

생각할 이유 processor_method_id 더 이상의 레코드를 반환 할 수 하위 쿼리가 두 개 이상의 행을 반환한다고 말하는 것입니다. 데이터 선택 방법에 따라 LIMIT 절을 사용할 수 있습니다.

그래서이 될 것입니다 :

SET @id := (SELECT `processor_method_id` FROM `processor_method` WHERE `processor_id` = processor_id AND `method_id` = method_id LIMIT 1); 
+0

YEs, 나는 그것을 이미 시도했지만 항상 첫 번째 행을 반환합니다. 행은 processor_id와 method_id를 기반으로하지 않습니다. T_T – GrayFullBuster