我正在尝试将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 |
有关如何做到这一点的任何想法?
答案 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
要将其应用于新表格,请使用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