Я хочу выполнить декартово произведение между двумя операторами SELECT как
SELECT 1, 2 INNER JOIN SELECT 3, 4 ;
Я ожидаю, что результатом будет каждая комбинация (1,2) с (3,4), например:
1 3 2 3 1 4 2 4
Если вы укажете свои таблицы без какого-либо предложения JOIN ON или равенств / условий в предложении WHERE, вы получите искомый продукт catesian.
JOIN ON
WHERE
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 | +--------+--------+
Вы можете использовать предложение CROSS JOIN
SELECT MyTable1.Col1, MyTable2.Col2 FROM MyTable1 CROSS JOIN MyTable2
где MyTable1 имеет две строки, содержащие 1 и 2; и MyTable2 имеет две строки, содержащие 3 и 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), тогда перекрестное объединение будет выполнять это так:
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)