SQL - ¿Por que sql/Oracle no reconoce cuando llamo mis tablas d.FECHAAUTORIZADO y r.FECHA_CONCLUSION?

 
Vista:
sin imagen de perfil

¿Por que sql/Oracle no reconoce cuando llamo mis tablas d.FECHAAUTORIZADO y r.FECHA_CONCLUSION?

Publicado por Orybos (3 intervenciones) el 06/04/2018 21:33:28
Muy buenas.

Estoy resolviendo un ejercicio de sql y creo que me falta poco.

Pero en mi linea numero 37, me aparece el error de que SQL, donde me explica que el nombre de la columna FECHA_CONCLUSION de mi tabla d, y el nombre de columna FECHAAUTORIZADO de la tabla r, son nombres no validos de columnas para las tablas.

Algo se me escapa en el código, es algo pequeño o no fácil de notar a primera vista, pero queria buscar alguien que me diera un consejo para seguir desarrollando mejor el código.

Todo esto es un ejercicio avanzado para aprender a usar 2 tablas en una misma consulta de SQL, usando el motor de BD de Oracle.

Aquí el código completo que tengo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
SELECT *
  FROM (SELECT d.usuario_autoriza gafete, 'Creditos' operacion, d.id_trabajador, d.num_prestamo,
               CASE
                  WHEN (
						  ( SELECT COUNT (dispo.num_prestamo)
							FROM dba.dispoosiciones dispo
                            WHERE dispo.id_trabajador = d.id_trabajador
                            AND dispo.codigos_esp = '0'
							AND dispo.estado IN '1'
							AND dispo.origen NOT IN 't'
                            AND dispo.codproducto IN (
														SELECT valor
														FROM dba.parametros_jts
														WHERE funcionalidad = 'REPORTE_TRANSACCIONES_ANALISTAS'
														AND parametro LIKE '%PRODUCTO_PROCESOS_CREDITO%'
														AND codigos_esp = '0'
													)
							) > 1
                       )
                  THEN 'Segundo Credito'
                  ELSE 'Primer Credito'
				END descripcion,
               d.FECHAAUTORIZADO,r.FECHA_CONCLUSION,d.sucursalautoriza sucursal,d.codproducto, d.estado
         FROM dba.dispoosiciones d,dba.REPORTESOLICITUDES r
         WHERE d.codigos_esp = '0'
         AND d.origen NOT IN 't'
         AND d.codproducto IN (
								SELECT valor
								FROM dba.parametros_jts
								WHERE funcionalidad = 'REPORTE_TRANSACCIONES_ANALISTAS'
								AND parametro LIKE '%PRODUCTO_PROCESOS_CREDITO%'
								AND codigos_esp = '0'
							   )
		)
 
	WHERE d.FECHAAUTORIZADO IN '16/03/2018'
	AND r.FECHA_CONCLUSION IN '16/03/2018'
 
 
     UNION
 
SELECT usuario_autoriza gafete, 'Creditos' operacion,id_trabajador,num_prestamo,'Primer Credito' DESCRIPCION,FECHAAUTORIZADO, FECHA_CONCLUSION,SUCURSALAUTORIZA,CODPRODUCTO,estado
FROM dba.dispoosiciones
WHERE
codproducto IN ('377','333','360','119','111') -- buscar solo el pdto que en el qry de arriba no aparece
AND FECHAAUTORIZADO IN '16/03/2018'
AND	FECHA_CONCLUSION IN '16/03/2018'
   ;

Cualquier comentario es agradecido profundamente. Buen dia.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

¿Por que sql/Oracle no reconoce cuando llamo mis tablas d.FECHAAUTORIZADO y r.FECHA_CONCLUSION?

Publicado por leonardo_josue (1173 intervenciones) el 09/04/2018 15:47:24
Hola de nuevo Orybos:

Creo que te faltó poner algo de atención a lo que te escribí en el otro post: ahí te decía lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
4. En el WHERE estás haciendo uso del alias "d" para el campo FECHA, sin embargo este alias está dentro de la subconsulta por lo tanto NO TIENES ACCESO A ESTE ALIAS DESDE LA CONSULTA EXTERNA, sino que debes de usar justamente el alias que le asignas a la subconsulta:
 
SELECT *
FROM
(  SELECT campo1 FROM tabla alias_interno) alias_externo
WHERE alias_interno.campo1 = 'algo' --> ESTO NO PUEDES HACERLO:
 
entonces, tienes que hacerlo así:
 
SELECT *
FROM
(  SELECT campo1 FROM tabla alias_interno) alias_externo
WHERE alias_externo.campo1 = 'algo' --> DEBES DE USAR EL ALIAS QUE LE DAS A LA SUBCONSULTA

En otras palabras, tienes dos errores en tu consulta, primero NO LE PONES UN ALIAS A TU SUBCONSULTA PRINCIPAL y segundo, los alias "d" y "r" forman parte de la subconsulta, por lo tanto no los puedes usar FUERA de la subconsulta...

Además debes de tener cuidado con la sentencia IN, ya que esta es para comparar varios valores y la sintaxis es

1
campo IN ('valor1', 'valor2', 'valorN')

Si vas a comparar un solo valor entonces comparas con igual (=).

Finalmente, debes de cuidar el FORMATO DE FECHA con el que comparas, no nos dices con qué DBMS estás trabajando, pero la mayoría de los motores de BD's utilizan el formato ANSI para el manejo de fechas, (YYYY-MM-DD), revisa este detalle antes de poner la cadena con la fecha que quieres filtrar.

Por lo tanto, tienes de dos sopas, o filtras la información DENTRO DE LA SUBCONSULTA, es decir, algo así:

1
2
3
4
5
6
7
8
9
10
11
SELECT *
FROM ( SELECT ...
       FROM dba.dispoosiciones d,dba.REPORTESOLICITUDES r
       WHERE d.codigos_esp = '0'
       AND d.origen NOT IN 't'
       AND d.codproducto IN ( SELECT ... )
       AND d.FECHAAUTORIZADO = '2018-03-16'
       AND r.FECHA_CONCLUSION = '2018-03-16'
     ) alias
UNION
SELECT ...



O en su defecto, le pones un alias a la subconsulta Y UTILIZAS ESE ALIAS PARA HACER REFERENCIA A LOS CAMPOS FUERA DE LA SUBCONSULTA.

1
2
3
4
5
6
7
8
9
10
11
12
SELECT *
FROM ( SELECT ...
       FROM dba.dispoosiciones d,dba.REPORTESOLICITUDES r
       WHERE d.codigos_esp = '0'
       AND d.origen NOT IN 't'
       AND d.codproducto IN ( SELECT ... )
     ) alias
WHERE
  alias.FECHAAUTORIZADO = '2018-03-16'
  AND alias.FECHA_CONCLUSION = '2018-03-16'
UNION
SELECT ...

Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar