Mysql 从查询中创建的表中联接两行

Mysql 从查询中创建的表中联接两行,mysql,Mysql,我有一张有物品清单的桌子。每个项目有2个变体,但它们作为单个项目在主表中。我想做的是结果的笛卡尔积,有两种变化 SELECT * FROM items 会给我 ID 1 2 我想: ID Variation 1 a 1 b 2 a 2 b 这必须在查询中完成,因为有另一个左连接到该查询 我可以通过执行以下操作获得第一个变量: SELECT * FROM items JOIN (SELECT 'a' as Variation) as v 但这只给了我需要的4行中

我有一张有物品清单的桌子。每个项目有2个变体,但它们作为单个项目在主表中。我想做的是结果的笛卡尔积,有两种变化

SELECT * FROM items
会给我

ID
1
2
我想:

ID   Variation
1    a
1    b
2    a
2    b
这必须在查询中完成,因为有另一个左连接到该查询

我可以通过执行以下操作获得第一个变量:

SELECT * FROM items JOIN (SELECT 'a' as Variation) as v
但这只给了我需要的4行中的2行

我知道如果我有一个实际的两行变量表,那就行了。可以创建两行吗?我也尝试过,但失败了:

SELECT * FROM items JOIN (SELECT ('a','b') as Variation) as v
您可以使用:

SELECT * FROM items CROSS JOIN items AS v
正如@草莓所评论的,还有另一个选项:

SELECT * FROM items JOIN items AS v

如果希望每行项目与
a
b
配对,可以执行以下操作:

SELECT * FROM items
CROSS JOIN (
    SELECT 'a' Variation
    UNION ALL
    SELECT 'b' Variation
    ) Variations

对不起,我用“a”和“b”作为变体来澄清这一点。我不是在第二列中加入同一个表。我希望每行有2行,将表连接到表本身将使行数平方。5个项目变成25个排列,而不是10个。当我将“(选择“a”)作为v'时,它在内存中创建了一个只有一行的表。我需要一个两排的。我不希望创建实际的第二个表。