Digamos que tengo

select 
    (select SomColumn FROM MyInnerTable WHERE MyInnerTable.C1 = MyOuterTable.C2) AS FirstColumn
    ,(select SomColumn FROM (SELECT SomColumn FROM MyInnerTable2 WHERE MyInnerTable2.C1 = MyOuterTable.C2)) AS SecondColumn
form MyOuterTable

FirstColumn funciona pero para SecondColumn dice que MyOuterTable.C2 no se encuentra.

0
user960567 16 ago. 2020 a las 10:42

2 respuestas

La mejor respuesta

Oracle (y MySQL y quizás algunas otras bases de datos) limitan el alcance de una tabla a un nivel en una subconsulta. ¡Ups! No puedo hacerlo de esa manera.

En este caso, debería usar LEFT JOIN de todos modos. Su consulta realmente no necesita la subconsulta, pero puede usar:

select i.SomeColumn, i.SomeColumn as AS SecondColumn
form MyOuterTable o LEFT JOIN
     MyInnerTable i
     ON MyInnerTable.C1 = MyOuterTable.C2;

En situaciones más complejas, puede encontrar que las uniones laterales son lo que necesita para resolver el problema. Si necesita ayuda con eso, haga una nueva pregunta con un ejemplo de consulta mejor.

2
Gordon Linoff 16 ago. 2020 a las 11:22

Esto funciona para mí:

SELECT (select NAME FROM DEPARTMENT DEP WHERE DEP.DEPARTMENT_ID = EMP.DEPARTMENT_ID) AS DEPARTMENT_NAME,
(select NAME FROM (SELECT NAME FROM DEPARTMENT DEP WHERE DEP.DEPARTMENT_ID = EMP.DEPARTMENT_ID)) AS NEW_NAME
FROM EMPLOYEE EMP;

¿Estás haciendo algo diferente?

0
mohd atif 16 ago. 2020 a las 08:07