Condividi tramite


Creare Self-Joins manualmente (Visual Database Tools)

si applica a:SQL Server

È possibile unire una tabella a se stessa anche se la tabella non ha una relazione riflessiva nel database. Ad esempio, è possibile usare un self-join per trovare coppie di autori che vivono nella stessa città.

Come per qualsiasi join, un self-join richiede almeno due tabelle. La differenza è che, invece di aggiungere una seconda tabella alla query, si aggiunge una seconda istanza della stessa tabella. In questo modo, è possibile confrontare una colonna nella prima istanza della tabella con la stessa colonna nella seconda istanza, che consente di confrontare i valori in una colonna l'uno con l'altro. La Visualizzazione Query e Progettazione delle Viste assegna un alias alla seconda istanza della tabella.

Ad esempio, se si crea un self-join per trovare tutte le coppie di autori all'interno di Berkeley, si confronta la colonna city nella prima istanza della tabella con la colonna city nella seconda istanza. La query risultante potrebbe essere simile alla seguente:

SELECT   
         authors.au_fname,   
         authors.au_lname,   
         authors1.au_fname AS Expr2,   
         authors1.au_lname AS Expr3  
      FROM   
         authors   
            INNER JOIN  
            authors authors1   
               ON authors.city   
                = authors1.city  
      WHERE  
         authors.city = 'Berkeley'  

La creazione di un self-join richiede spesso più condizioni di collegamento. Per comprendere il motivo, considerare il risultato della query precedente:

Cheryl Carson       Cheryl Carson  
   Abraham Bennet      Abraham Bennet  
   Cheryl Carson       Abraham Bennet  
   Abraham Bennet      Cheryl Carson  

La prima riga è inutile; indica che Cheryl Carson vive nella stessa città di Cheryl Carson. La seconda riga è altrettanto inutile. Per eliminare questi dati inutili, aggiungere un'altra condizione mantenendo solo le righe di risultato in cui i due nomi di autore descrivono autori diversi. La query risultante potrebbe essere simile alla seguente:

SELECT   
         authors.au_fname,   
         authors.au_lname,   
         authors1.au_fname AS Expr2,   
         authors1.au_lname AS Expr3  
      FROM   
         authors   
            INNER JOIN  
            authors authors1   
               ON authors.city   
                = authors1.city  
               AND authors.au_id  
                <> authors1.au_id  
      WHERE  
         authors.city = 'Berkeley'  

Il set di risultati è stato migliorato:

Cheryl Carson       Abraham Bennet  
   Abraham Bennet      Cheryl Carson  

Le due righe dei risultati sono tuttavia ridondanti. Il primo dice che Carson vive nella stessa città di Bennet, e il secondo dice che Bennet vive nella stessa città di Carson. Per eliminare questa ridondanza, è possibile modificare la seconda condizione di join da "non uguale" a "minore di". La query risultante potrebbe essere simile alla seguente:

SELECT   
         authors.au_fname,   
         authors.au_lname,   
         authors1.au_fname AS Expr2,   
         authors1.au_lname AS Expr3  
      FROM   
         authors   
            INNER JOIN  
            authors authors1   
               ON authors.city   
                = authors1.city  
               AND authors.au_id  
                < authors1.au_id  
      WHERE  
         authors.city = 'Berkeley'  

Il set di risultati sarà simile al seguente:

Cheryl Carson       Abraham Bennet  

Per creare un auto-join manualmente

  1. Nel riquadro Diagramma, aggiungi la tabella o l'oggetto con valori di tabella a cui vuoi lavorare.

  2. Aggiungere di nuovo la stessa tabella, in modo che il riquadro Diagramma mostri due volte lo stesso oggetto o valori di tabella.

    Il Designer di Query e Viste assegna un alias alla seconda istanza aggiungendo un numero sequenziale al nome della tabella. Inoltre, i progettatori di Query e Viste creano una linea di collegamento tra le due istanze della stessa tabella o dello stesso oggetto con valori di tabella all'interno del riquadro Diagramma.

  3. Fare clic con il pulsante destro del mouse sulla riga di unione e scegliere Proprietà dal menu di scelta rapida.

  4. Nella finestra Proprietà fare clic su Condizione e Tipo di Join e fare clic sui puntini di sospensione (...) alla destra della proprietà.

  5. Nella finestra di dialogo Join modificare l'operatore di confronto tra le chiavi primarie in base alle esigenze. Ad esempio, è possibile modificare l'operatore in minore di (<).

  6. Creare la condizione di join aggiuntiva (ad esempio, authors.zip = authors1.zip) trascinando il nome della colonna join primaria della prima occorrenza della tabella o oggetto con valori di tabella e rilasciandolo sulla colonna corrispondente nella seconda occorrenza.

  7. Specificare altre opzioni per la query, ad esempio colonne di output, condizioni di ricerca e ordinamento.

Vedere anche

Creare automaticamente Self-Joins (Visual Database Tools)
Query con Join (Visual Database Tools)