Декартовое произведение 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)