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

Discussione: [My SQL] left join

  1. #1
    Utente di HTML.it L'avatar di pyotrex
    Registrato dal
    Feb 2003
    Messaggi
    554

    [My SQL] left join

    Ho una struttura appositamente semplificata del tipo:
    tabella dyn_catalogo
    ------
    id
    numero
    codice
    prezzo
    ------

    tabella dyn_descrizioni
    ----------
    id
    id_lingua
    id_catalogo
    descrizione
    -----------

    tabella dyn_nomi
    -----------
    id
    id_lingua
    id_catalogo
    nome
    -----------

    Per ogni elemento del catalogo non sempre esiste un nome o una descrizione, io vorrei che ogni record contenesse tutti i campi della tabella dyn_catalogo join nome join descrizione, questi ultimi 2 campi li voglio sempre, valorizzati o null.

    La query è la seguente ma non funzia, mi potreste dare una mano?

    SELECT dyn_catalogo.* , dyn_nomi.nome, dyn_descrizioni.descrizione
    FROM (
    dyn_catalogo
    LEFT OUTER JOIN dyn_nomi ON dyn_catalogo.id = dyn_nomi.id_catalogo
    )
    LEFT OUTER JOIN dyn_descrizioni ON dyn_descrizioni.id_catalogo = dyn_catalogo.id
    WHERE dyn_descrizioni.id_lingua = '1' AND dyn_nomi.id_lingua = '1' AND dyn_catalogo.id_padre = '0'
    ORDER BY dyn_nomi.nome
    Vivrò una vita intera e fortunatamente morirò una volta sola

  2. #2
    Utente di HTML.it L'avatar di pyotrex
    Registrato dal
    Feb 2003
    Messaggi
    554
    Please
    Vivrò una vita intera e fortunatamente morirò una volta sola

  3. #3
    Utente di HTML.it L'avatar di Avalox
    Registrato dal
    Nov 2003
    Messaggi
    302
    Non funzia con solo LEFT JOIN? :master:

    Prova con:

    codice:
    SELECT C.* , N.nome, D.descrizione
    FROM dyn_catalogo C
    LEFT JOIN dyn_nomi N
      ON C.id = N.id_catalogo
    LEFT JOIN dyn_descrizioni D 
      ON C.id = D.id_catalogo
    WHERE D.id_lingua = '1' AND N.id_lingua = '1' AND C.id_padre = '0'
    ORDER BY N.nome
    Fammi sapere

  4. #4
    Utente di HTML.it L'avatar di pyotrex
    Registrato dal
    Feb 2003
    Messaggi
    554
    Non so se ho capito bene, mi suggerisci di togliere "outer"?
    Se è così il problema rimane, anche perchè se così fosse mi avrebbe dato un errore di sintassi.
    Vivrò una vita intera e fortunatamente morirò una volta sola

  5. #5
    Utente di HTML.it L'avatar di Avalox
    Registrato dal
    Nov 2003
    Messaggi
    302
    Hai provato a fare copia-incolla? Che errore ti dà?

  6. #6
    Utente di HTML.it L'avatar di pyotrex
    Registrato dal
    Feb 2003
    Messaggi
    554
    Ho eseguito questa query:

    SELECT dyn_catalogo.* , dyn_nomi.nome, dyn_descrizioni.descrizione
    FROM (
    dyn_catalogo
    LEFT JOIN dyn_nomi ON dyn_catalogo.id = dyn_nomi.id_catalogo
    )
    LEFT JOIN dyn_descrizioni ON dyn_descrizioni.id_catalogo = dyn_catalogo.id
    WHERE dyn_descrizioni.id_lingua = '1' AND dyn_nomi.id_lingua = '1' AND dyn_catalogo.id_padre = '0'
    ORDER BY dyn_nomi.nome

    nessun errore solo che non restituisce i record che io prevedo restituisca
    Vivrò una vita intera e fortunatamente morirò una volta sola

  7. #7
    Utente di HTML.it L'avatar di Avalox
    Registrato dal
    Nov 2003
    Messaggi
    302
    Hai provato a fare il copia incolla della mia? se vedi ho tolto le parentesi...

    comunque cos'è l'indice id_padre? Io non lo vedo nella struttura che hai postato...

    :master:

  8. #8
    Utente di HTML.it L'avatar di pyotrex
    Registrato dal
    Feb 2003
    Messaggi
    554
    ho corretto la struttura,
    ------
    id
    id_padre
    numero
    codice
    prezzo
    ------

    tabella dyn_descrizioni
    ----------
    id
    id_lingua
    id_catalogo
    descrizione
    -----------

    tabella dyn_nomi
    -----------
    id
    id_lingua
    id_catalogo
    nome
    -----------
    non ho ancora fatto un copia incolla della tua perchè non capisco alcune cose:
    quando scrivi C D N intendi i miei dyn_catalogo, dyn_descrizioni, dyn_nomi?
    Poi, premetto che non è da tanto che uso le join quando scrivi
    codice:
    FROM dyn_catalogo C
    mi puoi spiegare che cosa siglifica?

    In ogni caso ho provato a togliere le parentesi e ad eseguire questa query:
    codice:
    SELECT dyn_catalogo. * , dyn_nomi.nome, dyn_descrizioni.descrizione
    FROM dyn_catalogo
    LEFT JOIN dyn_nomi ON dyn_catalogo.id = dyn_nomi.id_catalogo
    LEFT JOIN dyn_descrizioni ON dyn_descrizioni.id_catalogo = dyn_catalogo.id
    WHERE dyn_descrizioni.id_lingua = '1' AND dyn_nomi.id_lingua = '1' AND dyn_catalogo.id_padre = '0'
    ORDER BY dyn_nomi.nome
    il risultato è sempre lo stesso 2 record invece di 4 ma nessun errore.
    Vivrò una vita intera e fortunatamente morirò una volta sola

  9. #9
    Utente di HTML.it L'avatar di Avalox
    Registrato dal
    Nov 2003
    Messaggi
    302
    Utilizzare la lettera dopo la tabella serve per sotituire una sola lettera al posto del nome della tabella... codice più pulito e risparmio di tempo...

    codice:
    FROM dyn_catalogo C
    praticamente tutte le volte che c'è C è come se ci fosse dyn_catalogo... comunque...

    La query sembra corretta...
    Prova a togliere la condizione WHERE (tutta la riga). Se ottieni i tuoi 4 record 'presunti' significa che c'è una condizione che limita i tuoi risultati...altrimenti la join è sbagliata...

    Fammi sapere.



  10. #10
    Utente di HTML.it L'avatar di pyotrex
    Registrato dal
    Feb 2003
    Messaggi
    554
    Utilizzare la lettera dopo la tabella serve per sotituire una sola lettera al posto del nome della tabella... codice più pulito e risparmio di tempo...


    code:--------------------------------------------------------------------------------
    FROM dyn_catalogo C
    --------------------------------------------------------------------------------


    praticamente tutte le volte che c'è C è come se ci fosse dyn_catalogo... comunque...
    Fico non lo sapevo

    Faccio delle prove e ti faccio sapere
    Vivrò una vita intera e fortunatamente morirò una volta sola

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