Respondida No me permite left join, campo con varios times

  • lunes, 25 de junio de 2012 21:39
     
      Tiene código

    hola a todos, necesito ayuda urgente con un left join que no me sale, bueno lo que necesito es selecionar todos los registros que no entran en esta consulta:

    select * from TCON_REP_PAGO_CC a inner join TCON_PAGO_CC b on a.nua =b.nua and a.no_certi =b.no_certi and a.periodo_pla =b.periodo_pla and a.fech_ini =b.fech_ini and a.identificador =b.identificador and case when b.cod_trans ='100' then 700 when b.cod_trans ='101' then 701 when b.cod_trans ='102' then 702 when b.cod_trans ='150' then 750 when b.cod_trans ='151' then 751 when b.cod_trans ='152' then 752 when b.cod_trans ='154' then 754 when b.cod_trans ='200' then 720 when b.cod_trans ='207' then 707 when b.cod_trans ='210' then 710 when b.cod_trans ='502' then 762 when b.cod_trans ='503' then 763 end = a.cod_trans where a.cod_fuente ='02' and a.periodo_sol ='201201'

    
    
    
    

    como puedo seleccionar los registros de TCON_REP_PAGO_CC  que no ingresen a esta consulta????

    les ruego una ayudita con esto genios, saludos

Todas las respuestas

  • martes, 26 de junio de 2012 2:14
     
      Tiene código

    Supongo que haz querido sacar esta query

    select *, 
    	case   
    		when b.cod_trans ='100' then 700 
    		when b.cod_trans ='101' then 701
    		when b.cod_trans ='102' then 702
    		when b.cod_trans ='150' then 750
    		when b.cod_trans ='151' then 751
    		when b.cod_trans ='152' then 752
    		when b.cod_trans ='154' then 754
    		when b.cod_trans ='200' then 720
    		when b.cod_trans ='207' then 707
    		when b.cod_trans ='210' then 710
    		when b.cod_trans ='502' then 762
    		when b.cod_trans ='503' then 763
    	end 'cod_trans'
    from 
    	TCON_REP_PAGO_CC a 
    inner join 
    	TCON_PAGO_CC b 
    	on a.nua =b.nua 
    and 
    	a.no_certi =b.no_certi
    and 
    	a.periodo_pla =b.periodo_pla 
    and 
    	a.fech_ini =b.fech_ini 
    and 
    	a.identificador =b.identificador 
    and 
    	a.cod_fuente ='02' 
    and 
    	a.periodo_sol ='201201'

  • martes, 26 de junio de 2012 2:39
     
      Tiene código

    Por ejemplo asi:

    Select TCON_REP_PAGO_CC.*
    From   TCON_REP_PAGO_CC
    Except
    Select TCON_REP_PAGO_CC.*
    From TCON_REP_PAGO_CC
    Inner Join ...
        On ...
    Where ...
    

    No se si es el mas eficiente, pero asi evitas errores logicos.


    Blog: http://about.me/GeriReshef

  • martes, 26 de junio de 2012 17:07
     
      Tiene código

    intentando de la forma con except

    me da el siguiente error

    Todas las consultas combinadas que usan un operador UNION, INTERSECT o EXCEPT deben tener el mismo número de expresiones en sus listas de destino.
    parce ser por el where del final, me da el mismo error cuando tambien le pongo el mismo where antes del except
    
  • martes, 26 de junio de 2012 17:34
    Moderador
     
     Respondida Tiene código

    Creo que el error no es por el WHERE sino porque el SELECT inicial y el SELECT despues de EXCEPT no tienen el mismo numero de columnas.

    Haz tratado esto?

    select * from TCON_REP_PAGO_CC a inner join TCON_PAGO_CC b on a.nua =b.nua and a.no_certi =b.no_certi
    and a.periodo_pla =b.periodo_pla and a.fech_ini =b.fech_ini and a.identificador =b.identificador and case   
    					when b.cod_trans ='100' then 700 
    					when b.cod_trans ='101' then 701
    					when b.cod_trans ='102' then 702
    					when b.cod_trans ='150' then 750
    					when b.cod_trans ='151' then 751
    					when b.cod_trans ='152' then 752
    					when b.cod_trans ='154' then 754
    					when b.cod_trans ='200' then 720
    					when b.cod_trans ='207' then 707
    					when b.cod_trans ='210' then 710
    					when b.cod_trans ='502' then 762
    					when b.cod_trans ='503' then 763
    				end = a.cod_trans 
    where a.cod_fuente <>'02' OR a.periodo_sol <>'201201'

    Ahora, si lo que quieres es unicamente los registros de TCON_REP_PAGO_CC  que no ingresen a la consulta seria util saber si tu tabla TCON_REP_PAGO_CC tiene primary keys. Si tiene, podrias hacer algo asi:

    select * from TCON_REP_PAGO_CC a
    where a.key not in (
    select a.key from TCON_REP_PAGO_CC a inner join TCON_PAGO_CC b on a.nua =b.nua and a.no_certi =b.no_certi
    and a.periodo_pla =b.periodo_pla and a.fech_ini =b.fech_ini and a.identificador =b.identificador and case   
    					when b.cod_trans ='100' then 700 
    					when b.cod_trans ='101' then 701
    					when b.cod_trans ='102' then 702
    					when b.cod_trans ='150' then 750
    					when b.cod_trans ='151' then 751
    					when b.cod_trans ='152' then 752
    					when b.cod_trans ='154' then 754
    					when b.cod_trans ='200' then 720
    					when b.cod_trans ='207' then 707
    					when b.cod_trans ='210' then 710
    					when b.cod_trans ='502' then 762
    					when b.cod_trans ='503' then 763
    				end = a.cod_trans 
    where a.cod_fuente ='02' and a.periodo_sol ='201201')

    Saludos,

    Monica


    This posting is provided "AS IS" with no warranties, and confers no rights. Please remember to click "Mark as Answer" and "Vote as Helpful" on posts that help you. This can be beneficial to other community members reading the thread.

    • Marcado como respuesta Eder CostaOwner viernes, 29 de junio de 2012 15:22
    •  
  • martes, 26 de junio de 2012 21:24
     
     
    En el segundo Select deben aparecer solamente las columnas de la tabla TCON_REP_PAGO_CC.

    Blog: http://about.me/GeriReshef

  • lunes, 02 de julio de 2012 20:10
     
     
    no diseñe esas tablas y no tienen llaves :( , tambien intente seleccionar los mismos campos en ambas consultas y me da un resultado poco coherente en el inner join me da un total de 512 registros y con el except me muestra solo 28 registros el total de registros de tcon_rep_pagocc es de 568 :| no entiendo, por favor ayudaaa
    • Editado Bpotro82 lunes, 02 de julio de 2012 20:27
    •  
  • martes, 03 de julio de 2012 14:49
     
     
    ya me da un resultado el except pero no el esperado ambos select tienen los mismos campos, pero el resultado me da un numero inferior de filas al que se supone seria la excepción del resultado del segundo select y que pertenezcan al tcon_rep_apgo_cc, realmente me confundió
  • martes, 31 de julio de 2012 22:32
     
     
    Muchas gracias amigos, efectivamente tenia varios errores esa consulta lo que intentaba era realizar el cruze de datos de una tabla y otra para enparejar que registro va que que otro de la otra tabla, solo era analizar bien los conjuntos, el inner join me devuelve todo lo que realmente "cruza" lo que tiene correspondencia entre ambas tablas segun los campos que se añadan en el join, lo que buscaba era todo lo de la primera tabla que se quedaba suelto sin cruzar, entonces ya no use nada de except , solo en la primera consulta un left jpin para que memostrase todo lo de la izquerida y añadi en el where la condición de que algun campo de lka tabla 2 sea null, asi me muestra todo lo de la tabla1 que no tienen para nada correspondencia en la tablas 2, saludos :)