Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940

    [MySQL5] Problema query con LEFT JOIN

    Buongiorno...

    Il problema di cui nel titolo è che la seguente query:

    codice:
    SELECT * 
    FROM tabella_documenti, tabella_tipi_documento 
    LEFT JOIN tabella_allegati 
    ON tabella_documenti.id_documento = tabella_allegati.docs_id 
    WHERE tabella_tipi_documento.id_tipo = tabella_documenti.tipo_documento 
    AND nome_file is NOT NULL
    con MySQL4 veniva eseguita come atteso, ma su MySQL5 no. mi ritorna:

    codice:
    #1054 - Unknown column 'id_documento' in 'on clause'
    Dove sbaglio?
    Grazie mille!

    [.:: JaguarXF ::.]
    __________________

  2. #2
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    FROM (tabella_documenti, tabella_tipi_documento)

    Aggiungi le parentesi

  3. #3
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Grazie mago!!

    E scusa, una domanda: da quando si usano le parentesi...?
    Grazie ancora!!

    [.:: JaguarXF ::.]
    __________________

  4. #4
    Originariamente inviato da mark2x
    Grazie mago!!

    E scusa, una domanda: da quando si usano le parentesi...?
    Grazie ancora!!
    In pratica dal mysql 5 le precedenze non sono più implicite, e la query che hai scritto risulta ambigua.

    Per evitare le parentesi ti basta sostituire la virgola con l'equivalente INNER JOIN, mantenendo così anche linearità di sintassi.

  5. #5
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Okappa, grazie!

    E con due LEFT JOIN in fila come sarebbe? Del tipo:

    codice:
    SELECT * 
    FROM (tabella_documenti, tabella_tipi_documento)
    LEFT JOIN tabella_allegati 
    ON tabella_documenti.id_documento = tabella_allegati.docs_id
    LEFT JOIN tabella_allegati_prova
    ON tabella_documenti.id_documento = tabella_allegati_prova.docs_id
    ...

    [.:: JaguarXF ::.]
    __________________

  6. #6
    se usi sempre gli operatori "<qualcosa> JOIN" non hai bisogno di parentesi

  7. #7
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Ora non ti seguo...

    [.:: JaguarXF ::.]
    __________________

  8. #8
    quella query si può scrivere così:

    SELECT *
    FROM tabella_documenti
    INNER JOIN tabella_tipi_documento
    ON blablabla
    LEFT JOIN tabella_allegati
    ON tabella_documenti.id_documento = tabella_allegati.docs_id
    LEFT JOIN tabella_allegati_prova
    ON tabella_documenti.id_documento = tabella_allegati_prova.docs_id
    ...

    senza bisogno di alcuna parentesi

  9. #9
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Ahn, ok!

    [.:: JaguarXF ::.]
    __________________

  10. #10
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da skidx
    In pratica dal mysql 5 le precedenze non sono più implicite
    questa frase non è che sia chiarissima eh

    Da mysql 5.0.12 le join esplicite prendono la precedenza su quelle implicite, contrariamente a quanto avveniva prima quando avevano pari 'dignità' e si procedeva da sinistra verso destra.

    Tutto questo per la precisione

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.