none
Plano Cartesiano en Inner Join RRS feed

  • Pregunta

  • Hola, buen día.

    Tengo las siguientes estructuras para las siguientes 2 bases de datos:


    Objetivo: unir las dos tablas por día, es decir, deseo una tabla con todos los campos sin que se genere un plano cartesiano.

    Yo estoy aplicando este query:

    Pero al generarlo se genera un plano cartesiano:

    Se está combinando un registro de la primera tabla con todos de la segunda n veces la cantidad de la primera.

    Mi primera tabla contiene 913 registros y la segunda 591. El producto de estas es 539,583.

    Ya leí muchos temas al respecto, pero ojalá puedan ayudarme, foro.

    Saludos.


    Gabriel Glez



    • Editado Gabriel Glez martes, 18 de septiembre de 2018 19:11
    martes, 18 de septiembre de 2018 8:52

Respuestas

  • Hola Gabriel Glez:

    Sin entender muy bien tus tablas, su objetivo y como estan formadas, me da que esa columna Delvry Qty..... tiene que ser una suma de las cantidades para...

    CREATE TABLE EMBARQUES ([SHIP-TO-PARTI] NVARCHAR(255), [DELVRY QTY] FLOAT, [SHIPMENT NUMBER] NVARCHAR(255), GOODSLSSUEDTE DATETIME)
    GO
    CREATE TABLE ORDENES ([SHIP-TO-PARTI] NVARCHAR(255),[ORDER QTY] FLOAT,  [SHIPMENT NUMBER] NVARCHAR(255),CUSPODATE DATETIME)
    GO
    INSERT INTO EMBARQUES ([SHIP-TO-PARTI] , [DELVRY QTY] , [SHIPMENT NUMBER] , GOODSLSSUEDTE ) VALUES
    ('2002567776',3.5,'16303165','20180101'),
    ('2002567776',4.901,'16303165','20180102'),
    ('2002567776',3.5,'16303165','20180101'),
    ('2002567776',3.5,'16303165','20180101')
    GO
    INSERT INTO ORDENES ([SHIP-TO-PARTI] ,[ORDER QTY] ,  [SHIPMENT NUMBER] ,CUSPODATE ) VALUES
    ('2002567776', 4, '16303165', '20180101'),
    ('2002567776', 3, '16303165', '20180101')
    
    GO
    select E.GOODSLSSUEDTE, SUM(E.[DELVRY QTY]),
    O.[SHIP-TO-PARTI],O.CusPoDate, O.[ORDER QTY]
    --into prueba1
    from Ordenes O inner join Embarques E
    on (O.CusPoDate = E.GoodsLssueDte) and 
    (O.[SHIP-TO-PARTI]= E.[SHIP-TO-PARTI])
    GROUP BY  E.GOODSLSSUEDTE,O.[SHIP-TO-PARTI],O.CusPoDate, O.[ORDER QTY]

    Espero que los tiros vayan por donde te digo.

    Ya comentas.

    Un saludo

    • Marcado como respuesta Gabriel Glez martes, 18 de septiembre de 2018 19:11
    martes, 18 de septiembre de 2018 9:47

Todas las respuestas

  • Hola Gabriel Glez:

    Sin entender muy bien tus tablas, su objetivo y como estan formadas, me da que esa columna Delvry Qty..... tiene que ser una suma de las cantidades para...

    CREATE TABLE EMBARQUES ([SHIP-TO-PARTI] NVARCHAR(255), [DELVRY QTY] FLOAT, [SHIPMENT NUMBER] NVARCHAR(255), GOODSLSSUEDTE DATETIME)
    GO
    CREATE TABLE ORDENES ([SHIP-TO-PARTI] NVARCHAR(255),[ORDER QTY] FLOAT,  [SHIPMENT NUMBER] NVARCHAR(255),CUSPODATE DATETIME)
    GO
    INSERT INTO EMBARQUES ([SHIP-TO-PARTI] , [DELVRY QTY] , [SHIPMENT NUMBER] , GOODSLSSUEDTE ) VALUES
    ('2002567776',3.5,'16303165','20180101'),
    ('2002567776',4.901,'16303165','20180102'),
    ('2002567776',3.5,'16303165','20180101'),
    ('2002567776',3.5,'16303165','20180101')
    GO
    INSERT INTO ORDENES ([SHIP-TO-PARTI] ,[ORDER QTY] ,  [SHIPMENT NUMBER] ,CUSPODATE ) VALUES
    ('2002567776', 4, '16303165', '20180101'),
    ('2002567776', 3, '16303165', '20180101')
    
    GO
    select E.GOODSLSSUEDTE, SUM(E.[DELVRY QTY]),
    O.[SHIP-TO-PARTI],O.CusPoDate, O.[ORDER QTY]
    --into prueba1
    from Ordenes O inner join Embarques E
    on (O.CusPoDate = E.GoodsLssueDte) and 
    (O.[SHIP-TO-PARTI]= E.[SHIP-TO-PARTI])
    GROUP BY  E.GOODSLSSUEDTE,O.[SHIP-TO-PARTI],O.CusPoDate, O.[ORDER QTY]

    Espero que los tiros vayan por donde te digo.

    Ya comentas.

    Un saludo

    • Marcado como respuesta Gabriel Glez martes, 18 de septiembre de 2018 19:11
    martes, 18 de septiembre de 2018 9:47
  • En mi humilde opinion no creo que es suficiente unir las tablas solo por las columnas senialadas.  Sera que la columna llamada [Shipment Number] tambien debera formar parte de la relacion?

    Con la informacion que has dado no es suficiente para darte una sugerencia.

    - Cual es la clave primaria de cada tabla?

    - Que contiene cada tabla?

    - Como se relacionan (columnas, cardinalidad, etc.)?


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    martes, 18 de septiembre de 2018 13:53
  • Gracias, Javi, no me funcionó, pero gracias de todos modos. La solución que le dí fue agrupar y después apliqué un inner join, y sólo así me salió. Saludos.

    Irving Glez

    martes, 18 de septiembre de 2018 19:12