Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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
Nel riquadro Diagramma, aggiungi la tabella o l'oggetto con valori di tabella a cui vuoi lavorare.
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.
Fare clic con il pulsante destro del mouse sulla riga di unione e scegliere Proprietà dal menu di scelta rapida.
Nella finestra Proprietà fare clic su Condizione e Tipo di Join e fare clic sui puntini di sospensione (...) alla destra della proprietà.
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 (<).
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.
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)