# Join

Il prefisso join unisce la tabella caricata a una tabella denominata esistente oppure all’ultima tabella di dati creata in precedenza.

L'effetto dell'unione dei dati è quello di estendere la tabella di destinazione di un insieme aggiuntivo di campi o attributi, vale a dire quelli che non sono già presenti nella tabella di destinazione. Qualsiasi nome di campo comune tra il set di dati di origine e la tabella di destinazione viene utilizzato per determinare come associare i nuovi record in ingresso. Questa viene comunemente indicata come "unione naturale". Un'operazione Join Qlik può fare in moco che la tabella di destinazione risultante abbia più o meno record di quelli con cui è stata creata, a seconda dell'unicità dell'associazione join e del tipo di operazione join utilizzato.

Esistono quattro tipi di join:

Left join

Le operazioni Left join sono il tipo più utilizzato. Ad esempio, se si dispone di un set di dati per una transazione e si desidera combinarlo con un set di dati di riferimento, in genere si utilizza `Left Join`. Per prima cosa è necessario caricare la tabella delle transazioni, quindi caricare il set di dati di riferimento e unirlo tramite un prefisso `Left Join` alla tabella delle transazioni già caricata. `Left Join` consente di mantenere tutte le transazioni così come sono e di aggiungere i campi dati di riferimento supplementari in cui viene trovata una corrispondenza.

Inner join

Quando si dispone di due set di dati in cui sono importanti solo i risultati in cui è presente un'associazione di corrispondenza, considerare l'utilizzo di `Inner Join`. Ciò consente di eliminare tutti i record sia dai dati di origine caricati che dalla tabella di destinazione se non viene trovata alcuna corrispondenza. Di conseguenza, l'operazione può la tabella di destinazione con meno record rispetto a prima che venisse completata l'operazione join.

Outer join

Quando è necessario conservare sia i record di destinazione che tutti i record in entrata, utilizzare `Outer Join`. Se non viene trovata alcuna corrispondenza, ogni set di record viene comunque conservato, mentre i campi dal lato opposto del JOIN non verranno popolati (null).

Se la parola chiave del tipo viene omessa, il tipo di join predefinito è un outer join.

Right join

Questo tipo di join mantiene tutti i record che stanno per essere caricati, riducendo i record nella tabella di destinazione tramite l'operazione di join solo ai record in cui è presente una corrispondenza di associazione nei record in entrata. Questo è un tipo di join di nicchia che viene talvolta utilizzato come mezzo per ridurre una tabella di record già caricata precedentemente in un sottoinsieme richiesto.

Esempi di set di risultati da diversi tipi di operazioni join

Esempi di set di risultati da diversi tipi di operazioni join

Esempi di set di risultati da diversi tipi di operazioni join ![Set di risultati di esempio da diversi tipi di operazioni join, con una rappresentazione prima e dopo delle tabelle di dati dopo ogni operazione.](https://help.qlik.com/it-IT/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-join-examples-operations.png)

Nota informaticaSe non ci sono nomi di campo in comune tra l'origine e la destinazione di un'operazione join, questa darà come risultato un prodotto cartesiano di tutte le righe, che viene definito "cross join".

Esempio di set di risultati da un'operazione di "cross join".

Esempio di set di risultati da un'operazione di "cross join".

Esempio di set di risultati da un'operazione di "cross join". ![Confronto prima e dopo dei dati di input e di output dopo un'operazione cross join (che può implicare un'operazione join di qualsiasi tipo).](https://help.qlik.com/it-IT/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-examples-join-no-common-fields.png)

Sintassi:

[inner | outer | left | right ]Join [ (tablename ) ]( loadstatement | selectstatement )

Argomenti

| Argomento | Descrizione |
| --- | --- |
| tablename | La tabella denominata da confrontare con la tabella caricata. |
| loadstatementoppure selectstatement | L'istruzione LOAD o SELECT per la tabella caricata. |

I seguenti argomenti possono aiutarti a lavorare con questa funzione:

Argomenti correlati

| Argomento | Descrizione |
| --- | --- |
| [Combinazione di tabelle con Join e Keep](https://help.qlik.com/it-IT/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/combine-tables-join-keep.htm) | Questo argomento fornisce un'ulteriore spiegazione dei concetti di "unione" e "mantenimento" dei set di dati. |
| [Keep](https://help.qlik.com/it-IT/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Keep.htm) | Il prefisso di caricamento `Keep` è simile al prefisso `Join`, ma non combina i set di dati di origine e di destinazione. Invece, ritaglia ogni set di dati in base al tipo di operazione adottata (inner, outer, left o right). |

## Esempio 1 - Left join: Miglioramento dei dati di una tabella di destinazione con un set di dati di riferimento

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm)

#### Script di caricamento e risultati

Panoramica

Aprire l'editor caricamento dati e aggiungere lo script di caricamento sotto in una nuova scheda.

Lo script di caricamento contiene:

* Un set di dati che rappresenta i record delle modifiche, che viene caricato in una tabella denominata `Changes`. Questa include il campo chiave "Status ID".

* Un secondo set di dati che rappresenta gli stati di modifica, che viene caricato e combinato con i record di modifica originali unendoli con un prefisso di caricamento `Join` a sinistra.

Questa operazione di left join assicura che i record di modifica rimangano intatti durante l'aggiunta di attributi di stato in cui viene trovata una corrispondenza nei record di stato in entrata in base a un ID di stato comune.

Script di caricamento

```
Changes:
Load * inline [ 
Change ID	Status ID	Scheduled Start Date	Scheduled End Date	Business Impact 
10030	4	19/01/2022	23/02/2022	None
10015	3	04/01/2022	15/02/2022	Low
10103	1	02/04/2022	29/05/2022	Medium
10185	2	23/06/2022	08/09/2022	None
10323	1	08/11/2022	26/11/2022	High
10326	2	11/11/2022	05/12/2022	None
10138	2	07/05/2022	03/08/2022	None
10031	3	20/01/2022	25/03/2022	Low
10040	1	29/01/2022	22/04/2022	None
10134	1	03/05/2022	08/07/2022	Low
10334	2	19/11/2022	06/02/2023	Low
10220	2	28/07/2022	06/09/2022	None
10264	1	10/09/2022	17/10/2022	Medium
10116	1	15/04/2022	24/04/2022	None
10187	2	25/06/2022	24/08/2022	Low
] (delimiter is '\t');

Status:
Left Join (Changes)
Load * inline [
Status ID	Status	Sub Status
1	Open	Not Started
2	Open	Started
3	Closed	Completed
4	Closed	Cancelled
5	Closed	Obsolete			
] (delimiter is '\t');
```

Risultati

Aprire il sistema di visualizzazione del modello dati e annotare la forma del modello di dati. È presente una sola tabella denormalizzata. Questa comprende una combinazione di tutti i record di modifica originali, con gli attributi di stato corrispondenti uniti a ciascun record di modifica.

Modello di dati interni risultante

| Modifiche |
| --- |
| Cambia ID |
| ID stato |
| Data di inizio programmata |
| Data di fine programmata |
| Impatto aziendale |
| Stato |
| Stato secondario |

Se si espande la finestra di anteprima nel sistema di visualizzazione modello dati, viene visualizzata una parte di questo set di risultati completo organizzato in una tabella:

Anteprima della tabella Modifiche nel sistema di visualizzazione modello dati

| Cambia ID | ID stato | Data di inizio programmata | Data di fine programmata | Impatto aziendale | Stato | Stato secondario |
| --- | --- | --- | --- | --- | --- | --- |
| 10030 | 4 | 19/01/2022 | 23/02/2022 | Nessuno | Chiuso | Annullato |
| 10031 | 3 | 20/01/2022 | 25/03/2022 | Scarso | Chiuso | Operazione completata |
| 10015 | 3 | 04/01/2022 | 15/02/2022 | Scarso | Chiuso | Operazione completata |
| 10103 | 1 | 02/04/2022 | 29/05/2022 | Medio | Aperto | Non avviato |
| 10116 | 1 | 15/04/2022 | 24/04/2022 | Nessuno | Apri | Non avviato |
| 10134 | 1 | 03/05/2022 | 08/07/2022 | Scarso | Apri | Non avviato |
| 10264 | 1 | 10/09/2022 | 17/10/2022 | Medio | Aperto | Non avviato |
| 10040 | 1 | 29/01/2022 | 22/04/2022 | Nessuno | Apri | Non avviato |
| 10323 | 1 | 08/11/2022 | 26/11/2022 | Elevati | Aperto | Non avviato |
| 10187 | 2 | 25/06/2022 | 24/08/2022 | Scarso | Aperto | Avviato |
| 10185 | 2 | 23/06/2022 | 08/09/2022 | Nessuno | Aperto | Avviato |
| 10220 | 2 | 28/07/2022 | 06/09/2022 | Nessuno | Aperto | Avviato |
| 10326 | 2 | 11/11/2022 | 05/12/2022 | Nessuno | Aperto | Avviato |
| 10138 | 2 | 07/05/2022 | 03/08/2022 | Nessuno | Aperto | Avviato |
| 10334 | 2 | 19/11/2022 | 06/02/2023 | Scarso | Aperto | Avviato |

Dato che la quinta riga nella tabella di stato (ID stato: "5", Stato: "Chiuso", Stato secondario: "Obsoleto") non corrisponde a nessuno dei record nella tabella delle modifiche, le informazioni in questa riga non appaiono nel set di risultati soprastante.

Tornare all'Editor caricamento dati. Caricare i dati e aprire un foglio. Creare una nuova tabella e aggiungere questo campo come dimensione: `Status`.

Aggiungere questa misura:

`=Count([Change ID])`

Ora è possibile verificare il numero di modifiche per stato.

Tabella dei risultati

| Stato | =Count([Change ID]) |
| --- | --- |
| Aperto | 12 |
| Chiuso | 3 |

## Esempio 2 – Inner join: Combinazione solo dei record corrispondenti

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm)

#### Script di caricamento e risultati

Panoramica

Aprire l'editor caricamento dati e aggiungere lo script di caricamento sotto in una nuova scheda.

Lo script di caricamento contiene:

* Un set di dati che rappresenta i record delle modifiche, che viene caricato in una tabella denominata `Changes`.

* Un secondo set di dati che rappresenta i record delle modifiche originate dal sistema di origine `JIRA`. Questo viene caricato e combinato con i record originali unendoli con un prefisso di caricamento `Inner Join`.

`Inner Join` garantisce che vengano mantenuti solo i cinque record delle modifiche che si trovano in entrambi i set di dati.

Script di caricamento

```
Changes:
Load * inline [
Change ID	Status ID	Scheduled Start Date	Scheduled End Date	Business Impact
10030	4	19/01/2022	23/02/2022	None
10015	3	04/01/2022	15/02/2022	Low
10103	1	02/04/2022	29/05/2022	Medium
10185	2	23/06/2022	08/09/2022	None
10323	1	08/11/2022	26/11/2022	High
10326	2	11/11/2022	05/12/2022	None
10138	2	07/05/2022	03/08/2022	None
10031	3	20/01/2022	25/03/2022	Low
10040	1	29/01/2022	22/04/2022	None
10134	1	03/05/2022	08/07/2022	Low
10334	2	19/11/2022	06/02/2023	Low
10220	2	28/07/2022	06/09/2022	None
10264	1	10/09/2022	17/10/2022	Medium
10116	1	15/04/2022	24/04/2022	None
10187	2	25/06/2022	24/08/2022	Low
] (delimiter is '\t');

JIRA_changes:
Inner Join (Changes)
Load
  [Ticket ID] AS [Change ID],
  [Source System]
inline
[
Ticket ID	Source System
10000	JIRA					
10030	JIRA
10323	JIRA
10134	JIRA
10334	JIRA
10220	JIRA
20000	TFS
] (delimiter is '\t');
```

Risultati

Caricare i dati e aprire un foglio. Creare una nuova tabella e aggiungere tali campi come dimensioni:

* `Source System`

* `Change ID`

* `Business Impact`

Ora è possibile esaminare i cinque record risultanti. La tabella risultante da `Inner Join` includerà solo i record con informazioni corrispondenti in entrambi i set di dati.

Tabella dei risultati

| Sistema di origine | Cambia ID | Impatto aziendale |
| --- | --- | --- |
| JIRA | 10030 | Nessuno |
| JIRA | 10134 | Scarso |
| JIRA | 10220 | Nessuno |
| JIRA | 10323 | Elevati |
| JIRA | 10334 | Scarso |

## Esempio 3 – Outer join: Combinazione di set di record sovrapposti

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm)

#### Script di caricamento e risultati

Panoramica

Aprire l'editor caricamento dati e aggiungere lo script di caricamento sotto in una nuova scheda.

Lo script di caricamento contiene:

* Un set di dati che rappresenta i record delle modifiche, che viene caricato in una tabella denominata `Changes`.

* Un secondo set di dati che rappresenta i record delle modifiche originate dal sistema di origine `JIRA`, che viene caricato e combinato con i record originali unendoli con un prefisso di caricamento `Outer Join`.

Ciò garantisce che tutti i record delle modifiche sovrapposte di entrambi i set di dati vengano mantenuti.

Script di caricamento

```
// 8 Change records

Changes:
Load * inline [
Change ID	Status ID	Scheduled Start Date	Scheduled End Date	Business Impact
10030	4	19/01/2022	23/02/2022	None
10015	3	04/01/2022	15/02/2022	Low
10138	2	07/05/2022	03/08/2022	None
10031	3	20/01/2022	25/03/2022	Low
10040	1	29/01/2022	22/04/2022	None
10134	1	03/05/2022	08/07/2022	Low
10334	2	19/11/2022	06/02/2023	Low
10220	2	28/07/2022	06/09/2022	None
] (delimiter is '\t');

// 6 Change records

JIRA_changes:
Outer Join (Changes)
Load
  [Ticket ID] AS [Change ID],
  [Source System]
inline
[
Ticket ID	Source System
10030	JIRA
10323	JIRA
10134	JIRA
10334	JIRA
10220	JIRA
10597	JIRA
] (delimiter is '\t');
```

Risultati

Caricare i dati e aprire un foglio. Creare una nuova tabella e aggiungere tali campi come dimensioni:

* `Source System`

* `Change ID`

* `Business Impact`

Ora è possibile esaminare i 10 record risultanti.

Tabella dei risultati

| Sistema di origine | Cambia ID | Impatto aziendale |
| --- | --- | --- |
| JIRA | 10030 | Nessuno |
| JIRA | 10134 | Scarso |
| JIRA | 10220 | Nessuno |
| JIRA | 10323 | - |
| JIRA | 10334 | Scarso |
| JIRA | 10597 | - |
| - | 10015 | Scarso |
| - | 10031 | Scarso |
| - | 10040 | Nessuno |
| - | 10138 | Nessuno |

## Esempio 4 – Right join: Semplificazione di una tabella di destinazione da un set di dati master secondario

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm)

#### Script di caricamento e risultati

Panoramica

Aprire l'editor caricamento dati e aggiungere lo script di caricamento sotto in una nuova scheda.

Lo script di caricamento contiene:

* Un set di dati che rappresenta i record delle modifiche, che viene caricato in una tabella denominata Changes.

* Un secondo set di dati che rappresenta i record di modifica provenienti dal sistema di origine Teamwork. Questo viene caricato e combinato con i record originali unendolo con un prefisso di caricamento Right Join.

Ciò garantisce che vengano mantenuti solo i record delle modifiche Teamwork, senza perdere alcun record Teamwork se la tabella di destinazione non ha nessuna corrispondenza Change ID.

Script di caricamento

```
Changes:

Load * inline [
Change ID	Status ID	Scheduled Start Date	Scheduled End Date	Business Impact
10030	4	19/01/2022	23/02/2022	None
10015	3	04/01/2022	15/02/2022	Low
10103	1	02/04/2022	29/05/2022	Medium
10185	2	23/06/2022	08/09/2022	None
10323	1	08/11/2022	26/11/2022	High
10326	2	11/11/2022	05/12/2022	None
10138	2	07/05/2022	03/08/2022	None
10031	3	20/01/2022	25/03/2022	Low
10040	1	29/01/2022	22/04/2022	None
10134	1	03/05/2022	08/07/2022	Low
10334	2	19/11/2022	06/02/2023	Low
10220	2	28/07/2022	06/09/2022	None
10264	1	10/09/2022	17/10/2022	Medium
10116	1	15/04/2022	24/04/2022	None
10187	2	25/06/2022	24/08/2022	Low
] (delimiter is '\t');

Teamwork_changes:
Right Join (Changes)
Load
  [Ticket ID] AS [Change ID],
  [Source System]
inline
[
Ticket ID	Source System
10040	Teamwork
10015	Teamwork
10103	Teamwork
10031	Teamwork
50231	Teamwork
] (delimiter is '\t');
```

Risultati

Caricare i dati e aprire un foglio. Creare una nuova tabella e aggiungere tali campi come dimensioni:

* Source System

* Change ID

* Business Impact

Ora è possibile esaminare i cinque record risultanti.

Tabella dei risultati

| Sistema di origine | Cambia ID | Impatto aziendale |
| --- | --- | --- |
| Lavoro in team | 10015 | Scarso |
| Lavoro in team | 10031 | Scarso |
| Lavoro in team | 10040 | Nessuno |
| Lavoro in team | 10103 | Medio |
| Lavoro in team | 50231 | - |

## Ulteriori informazioni

* [Load](https://help.qlik.com/it-IT/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm)
* [Select](https://help.qlik.com/it-IT/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Select.htm)
* [Inner](https://help.qlik.com/it-IT/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Inner.htm)
* [Outer](https://help.qlik.com/it-IT/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Outer.htm)
* [Left](https://help.qlik.com/it-IT/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Left.htm)
* [Right](https://help.qlik.com/it-IT/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Right.htm)
* [Keep](https://help.qlik.com/it-IT/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Keep.htm)
* [Combinazione di tabelle con Join e Keep](https://help.qlik.com/it-IT/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/combine-tables-join-keep.htm)