FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour (Off Topic) Consulta SQL (SOLUCIONADO)
Posts: 1818
Joined: Wed Oct 26, 2005 02:49 PM
(Off Topic) Consulta SQL (SOLUCIONADO)
Posted: Tue Feb 03, 2015 04:37 PM
Compañeros del foro tegan buen dia....

Lo que pasa es que requiero hacer una consulta SQL, en donde se relacionan 3 tablas, en la primera tabla LA PRINCIPAL tengo el id del cliente y el id de empresa en donde trabaja. En otra tabla tengo el nombre de cliente y en otra tabla el nombre de la empresa, asi:

TABLA_MOVIMIENTO

    id_cliente id_empresa tipo_cliente
    11______ 21_______ C________
    12______ 22_______ C________
    13______ 23_______ C________
    [/list:u]

    TABLA_CLIENTE

      id_cliente nombre_cliente
      11______ PEDRO
      12______ VILMA
      13______ PEBELS
      [/list:u]

      TABLA_EMPRESAS

        id_empresa nombre_empresa
        21_______ DISTRIBUIDORA
        22_______ CONSTRUCTURA
        23_______ SERVICIOS
        [/list:u]

        RESULTADO QUE QUIERO OBTENER

          id_cliente id_empresa tipo_cliente nombre_cliente nombre_empresa
          11______ 21________ C________ PEDRO_______ DISTRIBUIDORA
          12______ 22________ C________ VILMA_______ COMERCIALIZADORA
          13______ 23________ C________ PEBELS______ SERVICIOS
          [/list:u]

          La consulta la hago de la siguiente manera:
          Code (fw): Select all Collapse
          SELECT A.*,B.*,C.* FROM TABLA_MOVIMIENTO A LEFT JOIN TABLA_CLIENTES B ON A.id_cliente=B.id_cliente  LEFT JOIN TABLA_EMPRESAS C ON A.id_empresa=C.id_empresa WHERE A.tipocliente='C'


          Pero obtengo esto
          RESULTADO OBTENIDO

            id_cliente id_empresa tipo_cliente nombre_cliente nombre_empresa
            11______ 21________ C________ PEDRO_______ DISTRIBUIDORA
            11______ 21________ C________ PEDRO_______ DISTRIBUIDORA
            12______ 22________ C________ VILMA_______ COMERCIALIZADORA
            12______ 22________ C________ VILMA_______ COMERCIALIZADORA
            13______ 23________ C________ PEBELS______ SERVICIOS
            13______ 23________ C________ PEBELS______ SERVICIOS
            [/list:u]

            Me duplica los registros....

            Alguna idea?
Saludos
LEANDRO AREVALO
BogotĂĄ (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: (Off Topic) Consulta SQL
Posted: Wed Feb 04, 2015 12:24 AM

Intenta conectar la tabla de MOVIMIENTOS a la de CLIENTES y EMPRESA en un mismo JOIN y en ON condiciona los parametros que las relacionan usando un AND, es algo visto por encima, saludos... :shock:

Dios no estĂĄ muerto...



Gracias a mi Dios ante todo!
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: (Off Topic) Consulta SQL
Posted: Wed Feb 04, 2015 01:06 AM
Leandro:

Te muestro una consulta similar a la que tienes tĂș y me va bien.

1.- Son tres tablas
2.- Uno la segunda (Proveedor) y tercera (Proyecto) tablas desde la primera (HdrOdc)

Code (fw): Select all Collapse
oRsHdr:Source               := "SELECT " +;
                                        "HdrOdc.*," +;
                                        "Proveedor.Pro_Nom," +;
                                        "Proveedor.Pro_Sub," +;
                                        "Proyecto.Pro_Des " +;
                                    "FROM " +;
                                        "HdrOdc " +;
                                    "LEFT JOIN " +;
                                        "Proveedor " +;
                                    "ON " +;
                                        "HdrOdc.Hdr_Prv = Proveedor.Pro_Pro " +;
                                    "LEFT JOIN " +;
                                        "Proyecto " +;
                                    "ON " +;
                                        "HdrOdc.Hdr_Pro = Proyecto.Pro_Pro " +;
                                    "WHERE " +;
                                        "HdrOdc.Hdr_Odc < 0"

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: (Off Topic) Consulta SQL
Posted: Wed Feb 04, 2015 02:04 AM
Hola sr,, al vuelo,,, usa GRUPOS
Code (fw): Select all Collapse
SELECT A.*,B.*,C.* FROM TABLA_MOVIMIENTO A LEFT JOIN TABLA_CLIENTES B ON A.id_cliente=B.id_cliente  LEFT JOIN TABLA_EMPRESAS C ON A.id_empresa=C.id_empresa WHERE A.tipocliente='C'  GROUP BY CONCAT(id_cliente, id_empresa, tipo_cliente)
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: (Off Topic) Consulta SQL
Posted: Wed Feb 04, 2015 08:20 PM
Mr Leandro

Reason for getting duplicates:
Your SQL Statement:
Code (fw): Select all Collapse
SELECT A.*,B.*,C.* FROM TABLA_MOVIMIENTO A LEFT JOIN TABLA_CLIENTES B ON A.id_cliente=B.id_cliente  LEFT JOIN TABLA_EMPRESAS C ON A.id_empresa=C.id_empresa WHERE A.tipocliente='C'

has 2 spelling mistakes.

The first table you joined is TABLA_CLIENTES but it should be TABLA_CLIENTE.
In your database you may be having 2 tables TABLA_CLIENTE and TABLA_CLIENTES. TABLA_CLIENTES must be having duplicate records for each Cliente. That is the reason for your getting duplicates. The joining ID in the joined tables should be Unique.

If you rectify the spelling mistakes, correct SQL statement is:
Code (fw): Select all Collapse
   SELECT A.*,B.*,C.* FROM TABLA_MOVIMIENTO A LEFT JOIN TABLA_CLIENTE B ON A.id_cliente=B.id_cliente  LEFT JOIN TABLA_EMPRESAS C ON A.id_empresa=C.id_empresa WHERE A.tipo_cliente='C'

Use this SQL and you will get the results correctly. (3 rows)
Regards



G. N. Rao.

Hyderabad, India
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: (Off Topic) Consulta SQL
Posted: Wed Feb 04, 2015 10:09 PM
Yo lo harĂ­a de otra forma pero tal como tĂș lo tienes sĂłlo hace falta el DISTINCT:
Cambia:
Code (fw): Select all Collapse
SELECT A.*,B.*,C.* FROM TABLA_MOVIMIENTO A LEFT JOIN TABLA_CLIENTES B ON A.id_cliente=B.id_cliente  LEFT JOIN TABLA_EMPRESAS C ON A.id_empresa=C.id_empresa WHERE A.tipocliente='C'

por

SELECT DISTINCT A.*,B.*,C.* FROM TABLA_MOVIMIENTO A LEFT JOIN TABLA_CLIENTES B ON A.id_cliente=B.id_cliente  LEFT JOIN TABLA_EMPRESAS C ON A.id_empresa=C.id_empresa WHERE A.tipocliente='C'
______________________________________________________________________________

Sevilla - AndalucĂ­a
Posts: 1818
Joined: Wed Oct 26, 2005 02:49 PM
Re: (Off Topic) Consulta SQL
Posted: Wed Feb 04, 2015 10:43 PM
Muchas gracias a todos por responder...

Amigo willi, la solucion salio de combinar tu respuesta y la de Mr.Rao.
Unicamente llame los campos de los nombres de las tablas relacionadas para evitar que se duplicaran los registros, coloque el DISTINCT y funciono correctamente... :-)

La consulta quedo de la siguiente manera:

Code (fw): Select all Collapse
SELECT DISTINCT A.*,B.nombre_cliente,C.nombre_empresa FROM TABLA_MOVIMIENTO A LEFT JOIN TABLA_CLIENTE B ON A.id_cliente=B.id_cliente  LEFT JOIN TABLA_EMPRESAS C ON A.id_empresa=C.id_empresa WHERE A.tipo_cliente='C'


Codigo Final
Code (fw): Select all Collapse
SELECT DISTINCT A.*,B.nombre1,B.nombre2,B.apellido1,C.tipo_lote FROM lyma_cobro_serv A LEFT JOIN ma_tercero B ON A.ss_tercer=B.documento LEFT JOIN pm_tipo_lote C ON A.ss_tiplot=C.id_tipo_lote WHERE A.ss_period='0215' AND A.ss_manzan='25'


Muchas Gracias a Todos
Saludos
LEANDRO AREVALO
BogotĂĄ (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]

Continue the discussion