2012-10-11 3 views
2
SELECT * , 
    (SELECT ZoneName 
    FROM zone_message_master 
    WHERE ZoneID = zoneid) 'ZoneName' 
FROM zone_master 
WHERE ZoneID=zoneid; 

이 쿼리가 저장 프로 시저에서 실행되고 내가내 SQL 오류 하위 쿼리가 반환 이상 1 행

하위 쿼리는 1 개 이상의 행

어느 한 말할 수 반환 오류를 얻고있다 내가 여기서 잘못 했어?

답변

1

. 이 쿼리는 더 정확합니다

SELECT zm.* , zmm.ZoneName 
FROM zone_master zm 
JOIN zone_message_master zmm ON zm.ZoneID=zmm.ZoneID 
WHERE zm.ZoneID=zoneid; 
+0

감사합니다 ... –

2

내가 여기서 잘못 했습니까?

오류는 분명합니다. 하위 쿼리는 정확히 하나의 행을 반환해야하며 ORDER BY ... LIMIT 1을 사용하여 행 수를 제한 할 수 있습니다.

어떻게 해결할 수 있습니까? 대신 직접 그래서 같은

당신은 그것에 대해 하위 쿼리를 필요로하지 않았다 JOIN 두 테이블 : 당신이 당신의 zoneid에 대한 zone_message_master에 하나 개 이상의 항목이 의미

SELECT z.ZoneId, zm.ZoneName 
FROM zone_message_master zm 
INNER JOIN zone_master z ON zm.ZoneId = z.ZoneId 
0

문제는 아마 당신이있어 오류 메시지로 분명하다. 하위 쿼리를 속여서 한 행만 반환 할 수는 있지만 그렇지 않습니다. 당신이 의도 한대로 표 zone_message_master은 고유 한 ZoneID 값을 가져야한다는 것입니다. 올바른지 확인하려면 zone_message_master.ZoneID 열에 고유 색인을 만들어야합니다. 이것은 물론 그 테이블에서 약간의 청소가 필요 하겠지만 마침내 그것이 올바르게 작동하는지 확인하도록 권할 것입니다.

관련 문제