Left Join in Oracle query

0

Good morning!

I have the following query:

SELECT 
    *
FROM
    (SELECT CLIENTE.CTE, 
            CLIENTE.NO_EMPLEADO, 
            CLIENTE.CTE_N, 
            CLIENTE.NOMBRE, 
            CLIENTE.AP_PATERNO, 
            CLIENTE.AP_MATERNO, 
            CLIENTE.INGRESO, 
            CLIENTE.UNIDAD,
            CLIENTE.ACOMULADO, 
            CLIENTE.PERNO, 
            CLIENTE.FIAR, 
            CLIENTE.FIARN 
        FROM 
            ESQUEMA.CLIENTES CLIENTE 
        WHERE CLIENTE.CTE = '25') 
    TABLA01 
    LEFT JOIN
        (SELECT 
            SOLI.CTE, 
            SOLI.CONTROL, 
            SOLI.EST, 
            SOLI.MUN, 
            SOLI.LUG 
        FROM 
            ESQUEMA.DATOS SOLI 
        WHERE 
            SOLI.CTE = '25')
    TABLA2 ON TABLA1.CTE = TABLA2.CTE;

Which works very well, a direct query without problems, but recently it was implemented not having direct querys but in pure SP, but to my surprise it is not allowed the select * in an SP (rules where I work), then I try to change my query by removing the '*':

SELECT 
    CLIENTE.CTE, 
    CLIENTE.NO_EMPLEADO, 
    CLIENTE.CTE_N, 
    CLIENTE.NOMBRE, 
    CLIENTE.AP_PATERNO, 
    CLIENTE.AP_MATERNO, 
    CLIENTE.INGRESO, 
    CLIENTE.UNIDAD,
    CLIENTE.ACOMULADO, 
    CLIENTE.PERNO, 
    CLIENTE.FIAR, 
    CLIENTE.FIARN 
FROM 
    ESQUEMA.CLIENTES CLIENTE 
WHERE 
    CLIENTE.CTE = '25' 
LEFT JOIN 
    (SELECT 
        SOLI.CTE, 
        SOLI.CONTROL, 
        SOLI.EST, 
        SOLI.MUN, 
        SOLI.LUG 
    FROM 
        ESQUEMA.DATOS SOLI 
    WHERE SOLI.CTE = '25')
TABLA2 ON CLIENTE.CTE=TABLA2.CTE;

But it does not work for me, since it brings me more than one data (2 ... rows), when with the first one I only get a single result (1 row).

I understand that a left join will bring the data that matches what is sought on the left, my question is, how could I restructure my query to not use the 'select *'?

Thank you.

    
asked by 5frags 03.05.2017 в 16:14
source

1 answer

2

Try this query, since the two queries you are showing are not the same:

SELECT 
    TABLA01.CTE, 
    TABLA01.NO_EMPLEADO, 
    TABLA01.CTE_N, 
    TABLA01.NOMBRE, 
    TABLA01.AP_PATERNO, 
    TABLA01.AP_MATERNO, 
    TABLA01.INGRESO, 
    TABLA01.UNIDAD,
    TABLA01.ACOMULADO, 
    TABLA01.PERNO, 
    TABLA01.FIAR, 
    TABLA01.FIARN,
    TABLA2.CTE, 
    TABLA2.CONTROL, 
    TABLA2.EST, 
    TABLA2.MUN, 
    TABLA2.LUG 
FROM
    (SELECT CLIENTE.CTE, 
            CLIENTE.NO_EMPLEADO, 
            CLIENTE.CTE_N, 
            CLIENTE.NOMBRE, 
            CLIENTE.AP_PATERNO, 
            CLIENTE.AP_MATERNO, 
            CLIENTE.INGRESO, 
            CLIENTE.UNIDAD,
            CLIENTE.ACOMULADO, 
            CLIENTE.PERNO, 
            CLIENTE.FIAR, 
            CLIENTE.FIARN 
        FROM 
            ESQUEMA.CLIENTES CLIENTE 
        WHERE CLIENTE.CTE = '25') 
    TABLA01 
    LEFT JOIN
        (SELECT 
            SOLI.CTE, 
            SOLI.CONTROL, 
            SOLI.EST, 
            SOLI.MUN, 
            SOLI.LUG 
        FROM 
            ESQUEMA.DATOS SOLI 
        WHERE 
            SOLI.CTE = '25')
    TABLA2 ON TABLA1.CTE = TABLA2.CTE;

Notice that the only thing I did was add the fields you wanted in the first select.

    
answered by 03.05.2017 / 16:47
source