Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: [MySQL] JOIN e IF

  1. #1

    [MySQL] JOIN e IF

    Ciao,
    come da oggetto vorrei, se possibile realizzare una JOIN condizionale o meglio vorrei modificare la seguente:
    codice:
    LEFT JOIN gen_udm AS gu ON (RR.udm_riga = gu.idudm OR fp.um1_prod = gu.idudm OR gu.idudm IS NULL)
    in modo da dare priorità ad ognuna delle possibili soluzioni.
    In questo momento questa JOIN va bene se è soddisfatta una sola delle condizioni per l'ON, nel caso siano soddisfatte 2 o 3 il risultato è multiplo e ciò non va bene...
    Qualcuno saprebbe consigliarmi come risolvere x favore ??
    Una soluzione del tipo:
    codice:
    	
    LEFT JOIN gen_udm AS gu ON 
    	(
    		IF (RR.udm_riga = gu.idudm)
    			ELSE IF (fp.um1_prod = gu.idudm) 
    					ELSE IF gu.idudm IS NULL
    	)
    ma così ovviamente non è sintatticamente corretta !!
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

  2. #2
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Prima prova a spiegare che senso ha la condizione a null

  3. #3
    Ho risolto in altro modo ristudiando la struttura del db ed eliminando un OR che era ciò che creava problemi:
    codice:
    LEFT JOIN gen_udm AS gu ON (RR.udm_riga = gu.idudm OR gu.idudm IS NULL)
    Il significato di NULL mantiere però una sua idea ed utilità: il dato cercato può essere o non essere relazionato con l'alias "gu", ma in entrambi i casi serve che venga restituito un record relativo all'alias "RR".

    Grazie !!
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da rasega

    Il significato di NULL mantiere però una sua idea ed utilità: il dato cercato può essere o non essere relazionato con l'alias "gu", ma in entrambi i casi serve che venga restituito un record relativo all'alias "RR".

    Grazie !!
    Il NULL nella condizione di join non ha senso. E' come scrivere AND 1=1

  5. #5
    Scusa ma non condivido... ed esprimo solo il mio parere tecnico soggettivo e non assoluto non essendo un esperto di MySQL.
    Sta di fatto che ho utilizzato questa soluzione più volte e mi è stata utile, altrimenti come risolveresti il caso sopra esposto del tipo:
    - hai una tabella RR con un campo udm_riga di interi
    - hai una tabella GU con un campo idudm di interi
    Come estrapoli "TUTTI i record di RR" ponendo in JOIN con GU anche nel caso in cui il campo udm_riga non trovi corrispondenze con idudm ?? Capisco anche che tecnicamente questa situazione non sia precisa, poichè non ci si trova in una condizione di relazione 1:N o altro, ma nella pratica può capitare ...
    (questo esula comunque dall'oggetto di questo topic che avevo aperto che puntava a capire come e se utilizzare IF per gestire le JOIN !!)

    N.B.: la soluzione di utilizzo di IS NULL all'interno di ON l'ho trovata proprio all'interno di questo forum e ringrazio ancora l'utente che me l'ha fornita che tra l'altro non mi pare sia l'ultimo arrivato, io mi astengo dal fornire pareri non ritenendomi un luminare.
    http://forum.html.it/forum/showthrea...readid=1328240
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

  6. #6
    Originariamente inviato da rasega
    ...
    Come estrapoli "TUTTI i record di RR" ponendo in JOIN con GU anche nel caso in cui il campo udm_riga non trovi corrispondenze con idudm ??
    ...
    questo dovrebbe essere esattamente quello che fa il LEFT JOIN

  7. #7
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Per la prima domanda ti hanno già risposto qui sopra.

    Per quanto riguarda il consiglio che ti ha dato Piero, mi sa che l'hai capito male. Nella query che ti ha postato lui la condizione di NULL è posta sulla WHERE, non sulla ON. E questo ha senso, perché significa "voglio vedere i record non accoppiati". Messa dove la metti tu non significa niente.

  8. #8
    Grazie ad entrambi:
    1) il LEFT JOIN funziona se trova relazione...se non trova relazione non mi estrapola il record e per quel motivo ho cercato un'altra soluzione
    2) Ora provo a tornare a ritroso e rimodificare la query, ero partito da quella di piero fino a giungere a quella che ho ora, che modificata come ho indicato ora funziona, non è possibile che si ottenga lo stesso risultato ?
    Potresti x favore indicarmi la query utile riscrivendola come nella soluzione indicata da piero ?
    Grazie !!
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

  9. #9
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da rasega
    Grazie ad entrambi:
    1) il LEFT JOIN funziona se trova relazione...se non trova relazione non mi estrapola il record e per quel motivo ho cercato un'altra soluzione
    Negativo!! Quella è una INNER JOIN... la LEFT JOIN estrae tutti i record della prima tabella, a prescindere


    Originariamente inviato da rasega
    2) Ora provo a tornare a ritroso e rimodificare la query, ero partito da quella di piero fino a giungere a quella che ho ora, che modificata come ho indicato ora funziona, non è possibile che si ottenga lo stesso risultato ?
    Potresti x favore indicarmi la query utile riscrivendola come nella soluzione indicata da piero ?
    Grazie !!
    Certo che ottieni lo stesso risultato. La condizione che hai postato è semplicemente inutile, come ti ho detto sopra: è come scrivere AND 1=1
    Riscrivere la tua query la vedo un po' grigia, visto che non l'hai mai postata

  10. #10
    codice:
    LEFT JOIN gen_udm AS gu ON (RR.udm_riga = gu.idudm OR gu.idudm IS NULL)
    Oh mamma, intendevo la parte di query incriminata...
    ...grazie comunque lascia stare.
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

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