如何在没有ON条件的情况下使用MySQL JOIN?

我们可以不加条件地使用“交叉连接”。交叉联接以笛卡尔积形式给出结果。例如,如果一个表中有3条记录,而另一个表中有2条记录,则第一个记录将与所有第二个表记录匹配。然后,将重复相同的过程以进行第二次记录,依此类推。

交叉连接的例子

创建第一个表

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

创建第二个表

mysql> CREATE table PrimaryTableDemo
   - > (
   - >  FK int,
   - > Address varchar(100),
   - > primary key(FK)
   - > );

增加约束

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

将记录添加到第二个表中。

mysql> INSERT into PrimaryTableDemo values(1,'US');

mysql> INSERT into PrimaryTableDemo values(2,'UK');

mysql>  INSERT into PrimaryTableDemo values(3,'Unknown');

显示第二个表的记录。

mysql> SELECT * from PrimaryTableDemo;

以下是上述查询的输出。

+----+---------+
| FK | Address |
+----+---------+
|  1 | US      |
|  2 | UK      |
|  3 | Unknown |
+----+---------+
3 rows in set (0.00 sec)

将记录添加到第一个表中。

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

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

使用SELECT命令显示记录。

mysql> SELECT * from ForeignTableDemo;

以下是输出。

+------+------+------+
| Id   | Name | FK   |
+------+------+------+
|    1 | John |    1 |
|    2 | Bob  |    2 |
+------+------+------+
2 rows in set (0.00 sec)

我们对所有表进行了外键约束。现在,要在不使用ON的情况下使用“交叉连接”,让我们看看语法。

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

这是输出。

+------+------+---------+
| Id   | Name | Address |
+------+------+---------+
|    1 | John | US      |
|    2 | Bob  | US      |
|    1 | John | UK      |
|    2 | Bob  | UK      |
|    1 | John | Unknown |
|    2 | Bob  | Unknown |
+------+------+---------+
6 rows in set (0.00 sec)