2016-08-02 3 views
0

이 쿼리가 작동하지 않습니다. 나는 'prospectousuario'테이블에 합류 할 때 아무런 일치가 없다면 "sin asignar"라고 말해야하는 "Executive"라는 필드를 보여주고 싶습니다. 존재한다면 사장의 성명을 말해야합니다.하위 쿼리가 1 개 이상의 값을 반환하여 쿼리가 실패했습니다.

select p.IDCANCAP, 
p.CEDULA, 
p.NOMBRES, 
p.APELLIDOS, 
p.CELULAR, 
p.CASA, 
p.CORREO, 
p.ESTABLECIMIENTO, 
c.DESCRIPCION, 
(select case when 
p.CEDULA = pu.IDPROSPECTO and pu.IDUSUARIO = u.CEDULA 
then u.NOMBRES+' '+u.APELLIDOS else 'Sin asignar' 
end from usuario as u, PROSPECTOUSUARIO as pu) as Ejecutivo, 
p.FECHA_CREAC 

from PROSPECTO p, CANALCAPTACION c 
where p.IDCANCAP = c.IDCANAL 
+0

오류 메시지는 ** 문제 **가 무엇인지 정확히 알려주고 명세서에 하나의 하위 쿼리 만 있습니다. * 하위 쿼리가 둘 이상의 행을 반환하는 부분 *이 분명하지 않습니까? –

+0

하위 쿼리가 두 개 이상의 레코드를 반환 할 수 있습니다. 단일 레코드 만 반환하도록 하위 쿼리를 제한하는 방법에 대해 생각할 수 있습니까? –

+0

@TimBiegeleisen 테이블 'prospectos'의 모든 기록과 할당 된 임원의 이름을 말해야하는 추가 필드를 반환해야합니다. – Jorge

답변

0

소년이 당신의 SQL과 라인 사이에 많은 독서를 기반으로 추측입니다 ...하지만 그것을 제공 :

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an exp

쿼리는 다음과 같습니다 그러나 다음과 같은 오류를 반환 시도 : 오류 메시지가 말한다

select p.IDCANCAP, p.CEDULA, p.NOMBRES, 
    p.APELLIDOS, p.CELULAR,p.CASA, p.CORREO, 
    p.ESTABLECIMIENTO, c.DESCRIPCION, p.FECHA_CREAC, 
    case when exists 
     (Select * from PROSPECTOUSUARIO 
     Where IDPROSPECTO = p.CEDULA) 
     then u.NOMBRES+' '+ u.APELLIDOS 
     else 'Sin asignar' end Ejecutivo 
from PROSPECTO p 
    join CANALCAPTACION c on c.IDCANAL = p.IDCANCAP 
    join usuario u on u.CEDULA = p.CEDULA 
0

것처럼, 당신의 일을 오직 하위 쿼리

(select case when 
p.CEDULA = pu.IDPROSPECTO and pu.IDUSUARIO = u.CEDULA 
then u.NOMBRES+' '+u.APELLIDOS else 'Sin asignar' 
end from usuario as u, PROSPECTOUSUARIO as pu) 

은 1 행 이상을 반환하며 SELECT 내부의 표현식으로 사용될 때는 허용되지 않습니다. 실제로 upu 테이블은 의미있는 방식으로 다른 테이블과 조인되지 않는 것으로 보입니다.

수정하려면 테이블에 테이블을 가입시켜야합니다. 사실, 당신은 무엇을 하려는지에 대한 하위 쿼리조차 필요하지 않습니다. 모든 테이블을 FROM 섹션으로 이동하고 내부 또는 외부에 상관없이 올바르게 조인하십시오. 불행히도, 나는 그들이 어떤 분야에 합류해야하는지 모르겠다. 그래서 나는 더 많은 정보 나 야생 짐작없이 거기에서 도울 수 없다.

관련 문제