Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [MySQL] Fare il join tra una tabella ed una parte di un'altra

    Salve a tutti, ho il problema di dover fare un join esterno tra una tabella (di cui mi servono tutti i record) e alcuni record di un'altra tabella. Il problema è che se uso la clausola where mi brucio i record della prima tabella.
    Del tipo se faccio:

    SELECT tabella1.*
    FROM tabella1
    LEFT JOIN tabella2 ON tabella1.id=tabella2.id
    WHERE tabella2.campo > x

    Non ottengo tutti i record della tabella 1.
    Mi servirebbe quindi prima una select sulla tabella 2 per prelevare i record che mi servono, e poi fare il join con la prima tabella con la sicurezza di non perdermi nessun record.
    Qualcuno sa come posso risolvere?

    ciao e grazie

    P.S. mi sembrava il forum più adatto perchè l'accoppiata PHP-MySQL è molto usata...

  2. #2
    Utente di HTML.it L'avatar di unicorn
    Registrato dal
    Aug 2004
    Messaggi
    176
    Credo che la query che ti serve sia di questo tipo:

    SELECT tabella1.*, tabella2.campo1, tabella2.campo2
    FROM tabella1
    LEFT JOIN tabella2 ON tabella1.id=tabella2.id
    WHERE tabella2.campo1 > x



  3. #3
    Originariamente inviato da unicorn
    Credo che la query che ti serve sia di questo tipo:

    SELECT tabella1.*, tabella2.campo1, tabella2.campo2
    FROM tabella1
    LEFT JOIN tabella2 ON tabella1.id=tabella2.id
    WHERE tabella2.campo1 > x


    Non capisco cosa cambi dalla mia query (se non nella select, che cmq non risolve il mio problema).

  4. #4
    Utente di HTML.it L'avatar di unicorn
    Registrato dal
    Aug 2004
    Messaggi
    176
    Scusa forse non ho capito il problema, dunque hai 2 tabelle, tab1 e tab2, ti servono tutti i campi di tab1 che hanno un corrispondenza anche in tab2 (di cui però ti interessano solo alcuni campi) inoltre vuoi imporre un filtro in modo che un certo campo di tab2 sia maggiore di un valore.

    Se ho mal interpretato fammi sapere.

  5. #5
    Originariamente inviato da unicorn
    Scusa forse non ho capito il problema, dunque hai 2 tabelle, tab1 e tab2, ti servono tutti i campi di tab1 che hanno un corrispondenza anche in tab2 (di cui però ti interessano solo alcuni campi) inoltre vuoi imporre un filtro in modo che un certo campo di tab2 sia maggiore di un valore.

    Se ho mal interpretato fammi sapere.
    Si, mi servirebbe fare una subquery, perchè se metto la clausola where mi perdo alcuni record della tabella 1.
    Dovrei fare:

    SELECT tabella1.*
    FROM tabella1
    LEFT JOIN (SELECT * FROM tabella2 WHERE tabella2.id = 3) AS temp ON tabella1.id=temp.id

  6. #6
    Utente di HTML.it L'avatar di unicorn
    Registrato dal
    Aug 2004
    Messaggi
    176
    Prova con questa query, purtroppo non riesco a testarla


    select *
    from tab1
    where tab1.id in (select tab2.id,tab2.campo2
    from tab2
    where tab2.campo1>=3)


    Fammi sapere se riesci a risolvere il problema
    Ciao

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.