将旧表中的数据组合成指数级更大的表

时间:2018-02-18 03:27:10

标签: mysql

我正在尝试将table1中的数据插入到空table2中,但是为每个可能的组合创建一行。 一个简化的例子:

这是table1

table1:
 firstname lastname
|Bob      |Jackson |
|Steve    |Smith   |
|John     |Walker  |

我想相应地填写table2:

table2:
 firstname lastname
|Bob      |Jackson |
|Bob      |Smith   |
|Bob      |Walker  |
|Steve    |Jackson |
|Steve    |Smith   |
|Steve    |Walker  |
|John     |Jackson |
|John     |Smith   |
|John     |Walker  |

有关如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:1)

要扩展一对列以跨越两者之间的所有排列,您可以使用一个简单的CROSS JOIN将表连接到自身,并使用不同的别名。

SELECT
  -- Output columns come one each from the two different aliases
  t1.firstname,
  t2.lastname
FROM
  -- Use the same table on both sides of the join
  -- but with differing aliases t1, t2
  table1 t1
  CROSS JOIN table1 t2
ORDER BY t1.firstname, t2.lastname

Here it is in action

要将其应用于新表格,请使用CREATE TABLE AS...

CREATE TABLE table2 AS
SELECT
  t1.firstname,
  t2.lastname
FROM
  table1 t1
  CROSS JOIN table1 t2
ORDER BY t1.firstname, t2.lastname

请注意,它代替CROSS JOIN(更正确),您也可以使用INNER JOIN执行此操作,但省略ON条件以匹配行。两种方法都会生成两列的笛卡尔积 - 第一列的所有值乘以第二列的所有值。

答案 1 :(得分:0)

你必须得到笛卡尔积?

SELECT
b.firstname,
a.lastname
FROM Table1 a, Table1 b