2010-12-19 254 views
7

欲作爲MySQL的兩個SELECT語句

SELECT 1, 2  INNER JOIN  SELECT 3, 4 ; 

我希望得到的結果與(1,2)的每個組合(3,4)兩個SELECT語句之間執行笛卡爾乘積之間笛卡兒積,像:

1 3 
2 3 
1 4 
2 4 

回答

9

可以使用CROSS JOIN子句

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

MYTABLE1地方有兩行續艾寧1和2;和MyTable2具有包含3兩行和4

+7

交叉連接==內連接[MySQL 5.0](http://dev.mysql.com/doc/refman/5.0/en/join.html) – bobobobo 2010-12-19 04:03:02

+4

更多交叉連接== inner join = =加入 – 2014-10-26 09:28:40

+2

在MySQL中,JOIN,CROSS JOIN和INNER JOIN是語法等價物,它們不相同。 INNER JOIN和(逗號)在沒有連接條件的情況下在語義上是等價的:兩者都在指定的表之間生成笛卡爾積(即,第一個表中的每一行都連接到第二行中的每一行表)。 所以加入==內部連接但不是真正的交叉連接==內部連接 – mokNathal 2016-08-22 08:57:19

1
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 
12

如果您有任何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 | 
+--------+--------+ 
0

隨着使用此您的格式如你說不是 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)