Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1

    [MySQL] Problema OUTER JOIN

    ciao!

    sostanzialmente devo prendere tutte righe ordini di determinati negozi, ma in OUTER.
    quindi, mi servirebbe ottenere cmq tutti i negozi nella lista, anche se non hanno ordini.
    semplificando la query:
    codice:
    SELECT negozio_npu, negozio_codice
    FROM tesord 
    INNER JOIN rigord ON rigord_tesord_fk = tesord_id 
    INNER JOIN articoli ON articolo_npam = rigord_articolo_fk 
    LEFT OUTER JOIN st_negozi ON negozio_npu = tesord_de 
    WHERE tesord_inviato = 1 
    AND tesord_annullato = 0
    AND tesord_tipo = 'O'
    AND tesord_de IN(26721,24319,34586,34587,34611,27223,34620,34454,35347)
    AND articolo_codice = 'K190-347' 
    GROUP BY negozio_npu 
    ORDER BY negozio_ragsoc
    sono 9 negozi nella lista, ma io ne ottengo solo 5 (quelli che hanno effettivamente un ordine).
    è possibile ottenere cmq tutta la lista?

  2. #2
    prova a partire dai negozi (prima tabella nella query) e a mettere in left join il resto

  3. #3
    ciao.

    intendi così?:
    codice:
    SELECT negozio_npu, negozio_codice
    FROM st_negozi 
    LEFT OUTER JOIN tesord ON negozio_npu = tesord_de 
    LEFT OUTER JOIN rigord ON rigord_tesord_fk = tesord_id 
    LEFT OUTER JOIN articoli ON articolo_npam = rigord_articolo_fk 
    WHERE tesord_inviato = 1 
    AND tesord_annullato = 0
    AND tesord_tipo = 'O'
    AND negozio_npu IN(26721,24319,34586,34587,34611,27223,34620,34454,35347)
    AND articolo_codice = 'K190-347' 
    GROUP BY negozio_npu 
    ORDER BY negozio_ragsoc
    in caso, non ha funzionato.

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,356
    E cosi ?
    SELECT tesord_de, negozio_npu, negozio_codice
    ...
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  5. #5
    no neanche così!


    ho fatto anche diversi tentativi cambiando la GROUP, o selezionando direttamente tutti i campi.
    il numero di records è sempre lo stesso.

  6. #6
    ho anche provato a partire dagli articoli:
    codice:
    SELECT * FROM articoli
    LEFT OUTER JOIN rigord ON rigord_articolo_fk = articolo_npam
    LEFT OUTER JOIN tesord ON tesord_id = rigord_tesord_fk
    LEFT OUTER JOIN st_negozi ON negozio_npu = tesord_de
    WHERE tesord_inviato = 1 
    AND tesord_annullato = 0
    AND tesord_tipo = 'O'
    AND negozio_npu IN(26721,24319,34586,34587,34611,27223,34620,34454,35347)
    AND articolo_codice = 'K190-347'
    GROUP BY negozio_npu 
    ORDER BY tesord_de

  7. #7
    una possibile soluzione potrebbe essere questa:

    codice:
    SELECT negozio_npu, negozio_codice, negozio_ragsoc
    FROM tesord 
    INNER JOIN rigord ON rigord_tesord_fk = tesord_id 
    INNER JOIN articoli ON articolo_npam = rigord_articolo_fk 
    INNER JOIN st_negozi ON negozio_npu = tesord_de 
    WHERE tesord_inviato = 1 
    AND tesord_annullato = 0
    AND tesord_tipo = 'O'
    AND tesord_de IN(26721,24319,34586,34587,34611,27223,34620,34454,35347)
    AND articolo_codice = 'K190-347' 
    GROUP BY negozio_npu 
    UNION ALL
    SELECT negozio_npu, negozio_codice, negozio_ragsoc
    FROM st_negozi
    WHERE negozio_npu IN(26721,24319,34586,34587,34611,27223,34620,34454,35347)
    AND negozio_npu NOT IN (
        SELECT negozio_npu FROM articoli
        INNER JOIN rigord ON rigord_articolo_fk = articolo_npam
        INNER JOIN tesord ON tesord_id = rigord_tesord_fk
        INNER JOIN st_negozi ON negozio_npu = tesord_de
        WHERE tesord_inviato = 1 
        AND tesord_annullato = 0
        AND tesord_tipo = 'O'
        AND negozio_npu IN(26721,24319,34586,34587,34611,27223,34620,34454,35347)
        AND articolo_codice = 'K190-347'
        GROUP BY tesord_de 
        ORDER BY tesord_de
    )
    ORDER BY negozio_ragsoc
    non mi piace granchè, ma è l'unico modo in cui sono riuscito ad ottenere il numero di record "esatto" (nel senso che estraggo tutti i negozi).
    Ultima modifica di fermat; 21-05-2019 a 22:42

  8. #8
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,356
    E’ talmente brutta che per forza c’è un’altra soluzione. Magari avendo le strutture delle tabelle di cui non si puo’ fare a meno e alcuni dati.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  9. #9
    comunque non capisco, estrai solo info dei negozi, in left join, con una IN dichiarata... a cosa servono le JOIN se non tiri fuori NIENTE dalle altre tabelle?

  10. #10
    Quote Originariamente inviata da optime Visualizza il messaggio
    comunque non capisco, estrai solo info dei negozi, in left join, con una IN dichiarata... a cosa servono le JOIN se non tiri fuori NIENTE dalle altre tabelle?
    non ho ben capito cosa intendi.
    cmq provo a spiegare il problema.
    all'inizio dovevo estrarre tutti gli ordini di un determinato articolo e per i negozi nella IN.
    ecco perchè ero partito dalle testate ordini (tesord) e righe ordini (rigord).
    da rigord andavo sulla tabella articoli per visualizzare il dettaglio dell'articolo.
    da st_negozi estraevo solo le info del negozio (come la ragione sociale).

    poi è venuto fuori che vogliono visualizzare sempre i negozi, anche se non hanno ordinato quell'articolo.
    e cosi ho pensato di risolvere con una LEFT JOIN.
    ma i negozi che non lo hanno ordinato non si vedono cmq.

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 © 2019 vBulletin Solutions, Inc. All rights reserved.