加入匹配记录并在不匹配时创建组合

Join on matching records and create combinations when no match

我正在尝试使用另外两个创建一个新的 table。我想在合并 'value' 列时创建记录所有记录组合。我想要另一列告诉我价值来自哪里 像这样。:

甲:

Day    Month   Random1    Random2    value1 
01     Jan     AA         XX         12     
24     Mar     BB         YY         34     
13     Feb     CC         ZZ         7

乙:

Day    Month   value2
03     Jan     16
24     Mar     2

我想在日和月加入他们,但是如果没有行匹配,我希望它创建一个包含所有组合的行。

我想要一个table如下:

C:

Day    Month   Random1    Random2    value    Type
01     Jan     AA         XX         12       value1
24     Mar     BB         YY         34       value1
13     Feb     CC         ZZ         7        value1
03     Jan     AA         XX         16       value2
03     Jan     AA         YY         16       value2
03     Jan     AA         ZZ         16       value2
03     Jan     BB         XX         16       value2
03     Jan     BB         YY         16       value2
03     Jan     BB         ZZ         16       value2
03     Jan     CC         XX         16       value2
03     Jan     CC         YY         16       value2
03     Jan     CC         ZZ         16       value2
24     Mar     AA         XX         2        value2
24     Mar     AA         YY         2        value2
24     Mar     AA         ZZ         2        value2
24     Mar     BB         XX         2        value2
24     Mar     BB         YY         2        value2
24     Mar     BB         ZZ         2        value2
24     Mar     CC         XX         2        value2
24     Mar     CC         YY         2        value2
24     Mar     CC         ZZ         2        value2

我的 sql 查询异常复杂,我相信有一种简单的方法可以做到这一点。 (我实际上是使用 sqldf() 在 R 中编写此查询,我正在寻找 sql 建议,但我愿意接受替代方案。)

看起来好像结果集包括集合 A,加上由 Random1 的唯一值、Random2 的唯一值和集合 B 组合而成的集合。

我会用这个

SELECT Day, Month, Random1, Random2, value1, 'value1' AS type
FROM tableA
UNION
SELECT tableB.Day, tableB.Month, r1.Random1, r1.Random2, tableB.value2, 'value2'
FROM tableB
JOIN (SELECT DISTINCT Random1
      FROM tableA) AS r1
JOIN (SELECT DISTINCT Random2
      FROM tableA) AS r2;