Creazione di self-join in modo manuale (Visual Database Tools)
Si applica a: SQL Server
È possibile unire in join una tabella con se stessa anche se questa non ha una relazione riflessiva nel database. È ad esempio possibile utilizzare un self-join per individuare coppie di autori che risiedono nella stessa città.
Come per tutti i tipi di join, un self-join richiede almeno due tabelle, con la differenza che, anziché aggiungere una seconda tabella alla query, si aggiungerà una seconda istanza della stessa tabella. Sarà così possibile confrontare una colonna nella prima istanza della tabella con la stessa colonna nella seconda istanza, in modo da confrontare fra loro i valori contenuti in una colonna. In Progettazione query e Progettazione viste verrà assegnato un alias alla seconda istanza della tabella.
Se ad esempio si crea un self-join per trovare tutte le coppie di autori di Berkeley, verrà confrontata la colonna city
nella prima istanza della tabella con la colonna city
nella seconda istanza. La query risultante potrebbe essere analoga 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 spesso richiede più condizioni di join. Il risultato della query precedente può essere utile per comprenderne la motivazione:
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. Altrettanto inutile è la seconda riga. Per eliminare questi dati inutili, è possibile aggiungere un'altra condizione che consenta di conservare solo i risultati in cui i due nomi identificano autori diversi. La query risultante sarà analoga 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 è migliorato:
Cheryl Carson Abraham Bennet
Abraham Bennet Cheryl Carson
Le due righe di risultati, tuttavia, sono ridondanti. La prima dice che Carson vive nella stessa città di Bennet e la seconda dice che Bennet vive nella stessa città di Carson. Per eliminare questa ridondanza, è possibile modificare la seconda condizione di join da "diverso da" a "minore di". La query risultante sarà 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'
Si otterrà così un set di risultati analogo al seguente:
Cheryl Carson Abraham Bennet
Per creare manualmente un self-join
Aggiungere la tabella o l'oggetto con valori di tabella al riquadro Diagramma .
Aggiungere nuovamente la stessa tabella o lo stesso oggetto con valori di tabella in modo che venga visualizzato due volte nel riquadro Diagramma.
Un alias verrà assegnato alla seconda istanza aggiungendo un numero sequenziale al nome della tabella. Verrà inoltre inserita una linea di join tra le due occorrenze della tabella o dell'oggetto con valori di tabella all'interno del riquadro Diagramma.
Fare clic con il pulsante destro del mouse sulla linea di join e scegliere Proprietà dal menu di scelta rapida.
Nella finestra Proprietà fare clic su Condizione e tipo di join e sui puntini di sospensione (...) a destra della proprietà.
Nella finestra di dialogo Join cambiare l'operatore di confronto tra le chiavi primarie secondo necessità. È ad esempio possibile cambiare l'operatore in minore di (<).
Creare l'altra condizione di join, ad esempio authors.zip = authors1.zip, trascinando il nome della colonna join primaria nella prima occorrenza della tabella o dell'oggetto con valori di tabella e rilasciandolo sulla colonna corrispondente nella seconda occorrenza.
Specificare le altre opzioni per la query, quali le colonne di output, le condizioni di ricerca e il criterio di ordinamento.
Vedi anche
Creare self-join in modo automatico (Visual Database Tools)
Eseguire query con join (Visual Database Tools)