MySQL декартово произведение между двумя операторами SELECT - PullRequest
8 голосов
/ 19 декабря 2010

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

SELECT 1, 2     INNER JOIN     SELECT 3, 4 ;

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

1  3
2  3
1  4
2  4

Ответы [ 4 ]

12 голосов
/ 20 декабря 2010

Если вы укажете свои таблицы без какого-либо предложения JOIN ON или равенств / условий в предложении 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 |
+--------+--------+
10 голосов
/ 19 декабря 2010

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

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

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

1 голос
/ 19 декабря 2010
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
0 голосов
/ 01 июля 2014

При использовании этого ваш формат не такой, как вы говорите 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...