Query annidata x principiante

di il
6 risposte

Query annidata x principiante

Salve a tutti,
Sono un principiante, quindi abbiate pietà:
Ho due tabelle:
TABELLA1
UTENTE value 'Marco'
CAP value 'Milano'

TABELLA2
CITTA value 'Milano'
CAP Value '20100'

Nel campo CAP della tabella 1 non ho il cap vero e proprio, ma ho la città. Quindi mi serve la query che mi restituisce utente + cap prendendo quest'ultimo dalla tabella2

Questo per tutti i record della tabella1

Grazie Mille

6 Risposte

  • Re: Query annidata x principiante

    Ciao,
    se ti serve una semplice query che colleghi le due tabelle questo è comando sql da fornire:
    
    SELECT tabella1.utente, tabella2.cap
    FROM tabella1, tabella2
    WHERE tabella1.cap = tabella2.citta
    
    Naturalmente ti ritornerà solo i record per cui c'è corrispondenza in entrambe le tabelle.

    Se vuoi riportare tutti le righe della tabella di sinistra (Tabella 1) anche per quelle che non hanno corrispondenze sulla tabella di destra (tabella 2):
    
    SELECT tabella1.utente, tabella2.cap
    FROM tabella1 LEFT JOIN tabella2
    ON tabella1.cap = tabella2.citta
    
    Ciao.
  • Re: Query annidata x principiante

    Grazie per la risposta, ma non funziona.
    Come fa a sapere che deve prendere il campo CAP della tabella2 ?
    nel mio 3d ti ho semplificato la tabella, ma il realtà nella tabella 2 ho altri campi...

    Grazie
  • Re: Query annidata x principiante

    Scusa ma devi inserire le colonne realmente esistenti nelle tabelle, non esemplificate.

    Ma in tabella 2 c'è realmente il campo CAP?

    Se si la query:
    
        SELECT tabella1.utente, tabella2.cap
        FROM tabella1, tabella2
        WHERE tabella1.cap = tabella2.citta
    
    funziona così:

    1) Associa tutte le righe delle due tabelle ed estrae solo le righe che hanno tabella1.cap (milano) = a tabella2.citta (milano)

    2) Per queste righe visualizza solo le colonne tabella1.utente (marco) e tabella2.cap (20100).

    Io ho provato entrambi le versioni ora in una database access e funziona.

    Ciao.
  • Re: Query annidata x principiante

    Ok sembra funzioni, ma se la città in tabella due non viene trovata, come posso fare per restituire in CAP il valore originale della tabella 1:

    Esempio
    tabella1.CAP=ROMA
    in tabella2 Roma non esiste
    Attualmente tabella1.cap=NULL, io vorrei tabella1.cap=ROMA

    Grazie per la cortesia e pazienza
  • Re: Query annidata x principiante

    Bisogna lanciare 2 select consecutive, la 1a ti riporta gli utenti con il cap esistente numerico dalla tabell2, la 2a ti riporta gli utenti con il cap città ripreso dalla tabella1
    
    SELECT tabella1.utente AS UTENTE, tabella2.cap AS CAP
    FROM tabella1, tabella2
    WHERE tabella1.cap = tabella2.citta;
    SELECT tabella1.utente AS UTENTE , tabella1.cap AS CAP
    FROM tabella1
    WHERE NOT EXISTS (SELECT *
    FROM tabella2
    WHERE tabella1.cap = tabella2.citta);
    
    Prova a verificare se funziona, io l'ho provata su Access e sembra andare.

    Ciao.
  • Re: Query annidata x principiante

    Molto bene , Grazie!
Devi accedere o registrarti per scrivere nel forum
6 risposte