2014-12-10 4 views
0

이 쿼리가 작동하지 않는 이유는 무엇입니까? idlic과 (과) idlic에 속하는 기존 사용자를 비교하려고합니다.MySQL 쿼리 오류 알 수 없음

mysql에서 반환하는 메시지는 알 수없는 열입니다. 비교에 사용 된 값을 저장하려면 어떻게해야합니까?

select *, (select licencia from cuentas where idcuenta = ht.cuenta) as idlic 
from hojastrabajo ht 
where idlic = (select licencia from asociadolicencia where usuario = (select idusuario from usuarios where nombre = 'desarrollador')) 
+0

나는 그걸해야한다고 ... –

답변

1

당신은 정의 된 같은 select 또는 where의 열 별칭을 사용할 수 없습니다.

select ht.*, (select licencia from cuentas where idcuenta = ht.cuenta) as idlic 
from hojastrabajo ht 
having idlic = (select licencia 
       from asociadolicencia 
       where usuario = (select idusuario from usuarios where nombre = 'desarrollador') 
       ); 
+0

안녕하세요, 고든, 당신이이 주제에 대한 전문가이기 때문입니다. 이 (idcuenta = ht.cuenta 인 cuentas의 licencia를 idlic로 선택하십시오)을 나쁜 습관으로 간주 할 수 있습니까? 아니면 이것이 완벽하게 정상이며 환경 설정입니까? –

+0

감사합니다. –

+1

@Alex. . . 이 경우에는'왼쪽 결합 '을 선호합니다. 상관 관계가있는 하위 쿼리에 장점이있는 상황이 있지만 그 중 하나가 아닙니다. –

1

당신이 시도 할 수 : 당신이 대신 having 절을 사용할 수있는 MySQL은, -를 해결하려면 편리합니다?

select ht.*, c.licencia 
from hojastrabajo ht 
left join cuentas c 
on c.idcuenta = ht.cuenta 
where c.licencia = 
    (select licencia from asociadolicencia where usuario = 
     (select idusuario from usuarios where nombre = 'desarrollador') 
    ) 
+0

은 c.licencia없이 [idlic] –

0

당신은 "어디에서와 같이"진술서를 가져올 수 없습니다. select 필드 중 하나로서 쿼리를 갖는 것은 좋은 생각이 아닙니다. (select licencia ...)는 둘 이상의 결과를 반환합니다. 당신은이 테이블에 가입해야하고 어디에서 진술 전체 조건을 넣어.

관련 문제