Декартовое произведение MySQL между двумя операторами SELECT

Я хочу выполнить декартовое произведение между двумя операторами SELECT как

SELECT 1, 2     INNER JOIN     SELECT 3, 4 ;

Я ожидаю, что результатом будет каждая комбинация (1,2) с (3,4), например:

1  3
2  3
1  4
2  4

4 ответов


вы можете использовать предложение CROSS JOIN

SELECT MyTable1.Col1, MyTable2.Col2
FROM MyTable1
CROSS JOIN MyTable2

где MyTable1 имеет две строки, содержащие 1 и 2; и MyTable2 имеет две строки, содержащие 3 и 4.


если вы укажете свои таблицы без каких-либо JOIN ON предложение или равенства / conditionins в WHERE пункт вы получите catesian продукт, который вы ищете.

SELECT table1.field1, table2.field2
FROM table1, table2

даст вам то, что вы просите. Показать это более явно...

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 |
+--------+--------+

select v1, v2
from
  (select 1 as v1 union
   select 2) t1,
  (select 3 as v2 union
   select 4) t2

или даже проще:

select *
from
  (select 1 union
   select 2) t1,
  (select 3 union
   select 4) t2

С помощью этого формата не так, как вы говорите A(1,2) and B(3,4) тогда перекрестное соединение будет выполнять его так:

SELECT Table1.Col1, Table2.Col2
FROM Table1
CROSS JOIN Table2

(A*B)= (1,3),(1,4),(2,3),(2,4)