English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Come usare JOIN MySQL senza condizione ON?

Possiamo usare 'join incrociato' senza condizioni. Il join incrociato restituisce i risultati in forma di prodotto cartesiano. Ad esempio, se una tabella ha 3 record e un'altra tabella ha 2 record, il primo record corrisponderà a tutti i record della seconda tabella. Poi, viene ripetuto lo stesso processo per il secondo record, e così via.

Esempio di join incrociato

Crea la prima tabella

mysql> CREATE table ForeignTableDemo
   - > (
   - > Id int,
   - > Nome varchar(100),
   - > FK int
   - > );

Crea la seconda tabella

mysql> CREATE table PrimaryTableDemo
   - > (
   - >  FK int,
   - > Indirizzo varchar(100),
   - > chiave primaria(FK)
   - > );

Aggiungi restrizione

mysql> ALTER table ForeignTableDemo add constraint FKConst foreign key(FK) references PrimaryTableDemo(FK);
Records: 0  Duplicati: 0  Avvisi: 0

Aggiungi i record alla seconda tabella.

mysql> INSERT into PrimaryTableDemo values(1,'US');
mysql> INSERT into PrimaryTableDemo values(2,'UK');
mysql>  INSERT into PrimaryTableDemo values(3,'Unknown');

Mostra i record della seconda tabella.

mysql> SELECT * from PrimaryTableDemo;

Di seguito è riportato l'output della query sopra menzionata.

+----+---------+
| FK | Indirizzo |
+----+---------+
|   1 | US          |
|   2 | UK          |
|   3 | Sconosciuto |
+----+---------+
3 righe nel set (0.00 sec)

Aggiungi i record alla prima tabella.

mysql> INSERT into ForeignTableDemo values (1, 'John', 1);
mysql> INSERT into ForeignTableDemo values (2, 'Bob', 2);

Mostra i record utilizzando il comando SELECT.

mysql> SELECT * from ForeignTableDemo;

Ecco l'output.

+------+------+-+------
| Id    | Nome | FK     |
+------+------+-+------
|      1 | John |      1 |
|      2 | Bob  |      2 |
+------+------+-+------
2 righe nel set (0.00 sec)

Abbiamo applicato vincoli di chiave esterna a tutte le tabelle. Ora, per utilizzare il "cross join" senza ON, vediamo la sintassi.

mysql> SELECT ForeignTableDemo.Id, ForeignTableDemo.Name, PrimaryTableDemo.Address
   - > from ForeignTableDemo
   - > cross join PrimaryTableDemo;

Questo è l'output.

+------+------+-+---------+
| Id    | Nome | Indirizzo |
+------+------+-+---------+
|      1 | John | US          |
|      2 | Bob  | US          |
|      1 | John | UK          |
|      2 | Bob  | UK          |
|      1 | John | Sconosciuto |
|      2 | Bob  | Sconosciuto |
+------+------+-+---------+
6 righe nel set (0.00 sec)