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

时间:2016-06-10 17:28:55

标签: mysql sql r sqldf

我正在尝试使用其他两个创建一个新表。我想创建一个记录所有记录组合,同时合并一个'值'柱。我想要另一个列告诉我值的来源 像这样的东西。:

A:

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

B:

Day    Month   value2
03     Jan     16
24     Mar     2

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

我想要一张表如下:

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建议,但我愿意接受替代方案。)

1 个答案:

答案 0 :(得分:2)

好像结果集包含集合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;