两个SELECT语句之间的MySQL笛卡尔积

bob*_*obo 9 mysql select join

我想在两个SELECT语句之间执行笛卡尔积

SELECT 1, 2     INNER JOIN     SELECT 3, 4 ;
Run Code Online (Sandbox Code Playgroud)

我希望结果是(1,2)和(3,4)的每个组合,如:

1  3
2  3
1  4
2  4
Run Code Online (Sandbox Code Playgroud)

Rie*_*sio 13

如果您在表中指定了没有任何JOIN ON条款或等式/条件的表格,WHERE您将获得您正在寻找的catesian产品.

SELECT table1.field1, table2.field2
FROM table1, table2
Run Code Online (Sandbox Code Playgroud)

会给你你所要求的.更明确地展示它......

SELECT * FROM table1;
+--------+
| field1 |
+--------+
|      1 |
|      2 |
+--------+

SELECT * FROM table2;
+--------+
| field2 |
+--------+
|      3 |
|      4 |
+--------+

SELECT table1.field1, table2.field2 FROM table1, table2;
+--------+--------+
| field1 | field2 |
+--------+--------+
|      1 |      3 |
|      2 |      3 |
|      1 |      4 |
|      2 |      4 |
+--------+--------+
Run Code Online (Sandbox Code Playgroud)


bob*_*obs 10

您可以使用CROSS JOIN子句

SELECT MyTable1.Col1, MyTable2.Col2
FROM MyTable1
CROSS JOIN MyTable2
Run Code Online (Sandbox Code Playgroud)

其中MyTable1有两行,包含1和2; 和MyTable2有两行包含3和4.

  • `cross join` ==`inner join` [MySQL 5.0](http://dev.mysql.com/doc/refman/5.0/en/join.html) (7认同)
  • 更重要的是,交叉连接==内连接==加入 (5认同)
  • 在MySQL中,JOIN,CROSS JOIN和INNER JOIN是语法等价物,它们不相同.在没有连接条件的情况下,INNER JOIN和(逗号)在语义上是等价的:两者在指定的表之间产生笛卡尔积(即,第一个表中的每一行都连接到第二个表中的每一行) ).所以join == inner join但不适用于cross join == inner join (2认同)