Visualizzazione dei risultati da 1 a 3 su 3

Discussione: LEFT JOIN

  1. #1

    LEFT JOIN

    ragazzi qualcuno puo aiutarmi su questa query?

    SELECT opdn.DocEntry, opdn.DocNum, opdn.GroupNum, opdn.CardName, opdn.CardCode, opdn.U_CODMAGA,
    opdn.U_CODSPED,opdn.U_CELLA, opdn.U_DTFRANCH,
    pdn1.WhsCode, pdn1.BaseRef, pdn1.LineNum, pdn1.ItemCode, pdn1.Quantity, pdn1.TrnsCode,
    oitm.ItemName,
    octg.PymntGroup, octg.GroupNum,
    [@magazzini].code, [@magazzini].[Name],
    oshp.TrnspCode, oshp.TrnspName,
    owhs.WhsCode, owhs.WhsName,
    ocrd.CardCode, ocrd.CardName
    FROM
    ((((opdn LEFT JOIN pdn1 ON opdn.DocEntry = pdn1.DocEntry)
    LEFT JOIN [@magazzini] ON opdn.U_CODMAGA = [@magazzini].Code)
    LEFT JOIN ocrd ON opdn.CardCode = ocrd.CardCode)
    LEFT JOIN octg ON opdn.GroupNum = octg.GroupNum)
    (((((pdn1 LEFT JOIN oitm AS prodotto ON pdn1.ItemCode = oitm.ItemCode)
    LEFT JOIN oshp ON pdn1.TrnsCode = oshp.TrnspCode)
    LEFT JOIN owhs ON pdn1.WhsCode = owhs.WhsCode)
    LEFT JOIN opdn_clone ON pdn1.DocEntry = opdn_clone.DocEntry)
    LEFT JOIN opdn_clone ON pdn1.LineNum = opdn_clone.LineNum)

    WHERE opdn.U_CODSPED = '0001' and (opdn_clone.forzatura <> 'S' or opdn_clone.forzatura = NULL)

    order by opdn.U_DTFRANCH

    In effetti è una left join , potete controllare la sua correttezza?

    grazie

  2. #2
    Utente di HTML.it L'avatar di albis
    Registrato dal
    May 2002
    Messaggi
    912
    così senza conoscere il db e con quella sequela di left join non è facile
    comunque ad occhio scriverei così
    codice:
     
    SELECT opdn.DocEntry, opdn.DocNum, opdn.GroupNum, opdn.CardName, opdn.CardCode, opdn.U_CODMAGA,
    opdn.U_CODSPED,opdn.U_CELLA, opdn.U_DTFRANCH,
    pdn1.WhsCode, pdn1.BaseRef, pdn1.LineNum, pdn1.ItemCode, pdn1.Quantity, pdn1.TrnsCode,
    oitm.ItemName,
    octg.PymntGroup, octg.GroupNum,
    [@magazzini].code, [@magazzini].[Name],
    oshp.TrnspCode, oshp.TrnspName,
    owhs.WhsCode, owhs.WhsName,
    ocrd.CardCode, ocrd.CardName
    FROM
    opdn LEFT JOIN pdn1 ON (opdn.DocEntry = pdn1.DocEntry)
    LEFT JOIN [@magazzini] ON (opdn.U_CODMAGA = [@magazzini].Code)
    LEFT JOIN ocrd ON (opdn.CardCode = ocrd.CardCode)
    LEFT JOIN octg ON (opdn.GroupNum = octg.GroupNum)
    pdn1 LEFT JOIN oitm AS prodotto ON (pdn1.ItemCode = oitm.ItemCode)
    LEFT JOIN oshp ON (pdn1.TrnsCode = oshp.TrnspCode)
    LEFT JOIN owhs ON (pdn1.WhsCode = owhs.WhsCode)
    LEFT JOIN opdn_clone ON (pdn1.DocEntry = opdn_clone.DocEntry and pdn1.LineNum = opdn_clone.LineNum and  (opdn_clone.forzatura <> 'S' or opdn_clone.forzatura = NULL))
    WHERE opdn.U_CODSPED = '0001' 
    order by opdn.U_DTFRANCH
    ho tolto le parentesi inutili
    la condizione nella where che riguarda una tabella nel ramo povero di un join
    (nel caso della Left join la seconda) rende inutile la join
    quindi la condizione
    codice:
    and  (opdn_clone.forzatura <> 'S' or opdn_clone.forzatura = NULL)
    la ho messa nella clausola di join

    ho anche visto che mettevi in join due volte la tabella
    opdn_clone con due condizioni diverse sempre con la tabella pdn1 lo ho interpretato come errore e ho messo le due condizioni nella stessa join
    s einvece dovevi realmente joinarla due volte allora dovevi usare un alias tipo
    codice:
     
    .
    .
    LEFT JOIN opdn_clone ON (pdn1.DocEntry = opdn_clone.DocEntry  and  (opdn_clone.forzatura <> 'S' or opdn_clone.forzatura = NULL))
    LEFT JOIN opdn_clone as opdn_clone_Bus ON ( pdn1.LineNum = opdn_clone_Bus.LineNum and  (opdn_clone_Bus.forzatura <> 'S' or opdn_clone_Bus.forzatura = NULL))
    .
    .
    Forza la magica ROMA

  3. #3

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.