Condividi tramite


Duplice utilizzo di una tabella all'interno di una query

Aggiornamento: novembre 2007

È possibile utilizzare la stessa tabella due o più volte all'interno di una singola query. Esistono vari casi in cui questa operazione risulta utile.

  • Creazione di un self-join con una relazione riflessiva   È possibile eseguire il join di una tabella con se stessa utilizzando una relazione riflessiva, ovvero una relazione in cui le colonne chiave esterna contenenti i riferimenti e le colonne chiave primaria a cui viene fatto riferimento si trovano nella stessa tabella. Si supponga ad esempio che la tabella "employee" contenga un'ulteriore colonna, "employee.manager_emp_id", e che una chiave esterna di manager_emp_id sia presente in employee.emp_id. All'interno di ciascuna riga della tabella "employee", la colonna "manager_emp_id" indica il superiore di un dipendente. Più precisamente, indica l'emp_id del superiore del dipendente.

    Eseguendo il join della tabella con se stessa tramite questa relazione riflessiva, è possibile definire un gruppo di risultati in cui ogni riga contiene il nome di un superiore e il nome di uno dei dipendenti affidato alla sua responsabilità. Il codice SQL risultante potrebbe essere simile al seguente:

    SELECT 
        boss.lname, 
        boss.fname, 
        employee.lname, 
        employee.fname
    FROM 
        employee
            INNER JOIN 
            employee boss 
            ON employee.manager_emp_id 
            =  boss.emp_id
    

    Per ulteriori informazioni sulla creazione di join che utilizzano relazioni riflessive, vedere Procedura: creare self-join in modo automatico.

  • Creazione di un self-join senza una relazione riflessiva   È possibile eseguire il join di una tabella con se stessa senza utilizzare una relazione riflessiva. È possibile, ad esempio, definire un gruppo di risultati in cui ogni riga descrive un dipendente e un potenziale mentore di tale dipendente. Un potenziale mentore di un dipendente è un dipendente con una qualifica lavorativa più elevata. Il codice SQL risultante potrebbe essere simile al seguente:

    SELECT 
        employee.fname, 
        employee.lname, 
        mentor.fname, 
        mentor.lname 
    FROM 
        employee 
            INNER JOIN 
            employee mentor 
            ON employee.job_lvl 
            <  mentor.job_lvl
    

    Si noti che il join utilizza una condizione diversa dall'uguaglianza. Per ulteriori informazioni sul join di tabelle con condizioni diverse dall'uguaglianza, vedere Operatori di confronto JOIN.

    Per ulteriori informazioni sulla creazione di self-join con colonne non correlate, vedere Procedura: creare self-join in modo manuale.

  • Duplice utilizzo di una tabella senza un self-join   Anche senza un self-join, è possibile utilizzare la stessa tabella due o più volte in una query. È possibile, ad esempio, definire un gruppo di risultati contenente gli altri libri scritti dallo stesso autore o dagli stessi autori del proprio libro preferito. In questo caso, è necessario utilizzare due volte la tabella titleauthors: una prima volta per individuare gli autori del libro preferito (Is Anger the Enemy?) e una seconda volta per individuare gli altri libri scritti dagli stessi autori. Il codice SQL risultante potrebbe essere simile al seguente:

    SELECT 
        other_title.title
    FROM 
        titles favorite_title 
            INNER JOIN 
            titleauthor favorite_titleauthor 
            ON favorite_title.title_id 
            =  favorite_titleauthor.title_id 
                INNER JOIN 
                authors 
                ON favorite_titleauthor.au_id 
                =  authors.au_id 
                    INNER JOIN 
                    titleauthor other_titleauthor 
                    ON authors.au_id 
                    =  other_titleauthor.au_id 
                        INNER JOIN 
                        titles other_title 
                        ON other_titleauthor.title_id 
                        =  other_title.title_id 
    WHERE 
        favorite_title.title 
        = 'Is Anger the Enemy?' 
      AND 
        favorite_title.title 
        <> other_title.title 
    
    Nota:

    Per distinguere i molteplici utilizzi di una tabella, la query precedente utilizza i seguenti alias: favorite_title, favorite_titleauthor, other_titleauthor e other_title. Per ulteriori informazioni sugli alias, vedere Procedura: creare alias di tabella.

Vedere anche

Concetti

Utilizzo dei dati del riquadro Risultati

Altre risorse

Specifica dei criteri di ricerca