在两列R之间查找相互产品,引用另一个数据帧

时间:2017-05-23 08:43:45

标签: mysql sql sql-server r

我是R的新手,我正在尝试编写R脚本来查找两个地方之间的相互产品。我的两个表的表结构如下所示:

表1

OriginPlace DestinationPlace
Tampere   Turku
Turku     Helsinki
Oulu      Porvoo

表2

Place    ProductId
Tampere  Prod1
Tampere  Prod2
Tampere  Prod3
Turku    Prod2
Turku    Prod3
Helsinki Prod2
Oulu     Prod1
Oulu     Prod2
Porvoo   Prod1
Porvoo   Prod2

我希望我的结果表看起来像这样:

OriginPlace DestinationPlace MutualProducts
Tampere     Turku            Prod2
Tampere     Turku            Prod3
Turku       Helsinki         Prod2
Oulu        Porvoo           Prod1
Oulu        Porvoo           Prod2

实际数据要大得多。在这种情况下如何有效地使用for循环?提前谢谢。

2 个答案:

答案 0 :(得分:0)

以下查询将解决问题(假设table1为第一个包含OriginPlace和DestinationPlace列的表)

 SELECT
   table1.OriginPlace,
   table1.DestinationPlace,
   table2.ProductId as MultiProducts
FROM table1
   join table2 on table1.OriginPlace = table2.Place
   join table2 as tb2 on (tb2.Place = table1.DestinationPlace AND 
   tb2.ProductId = table2.ProductId)

答案 1 :(得分:0)

虽然我使用MS SQL语法来回答这个问题,但它应该与其他SQL类似。

您需要将 table2 加入 table1 两次。使用 OriginPlace 列,使用列 DestinationPlace 一次,然后检查ProductId的值是否相同

这样可以满足您的需求:

select   t1.OriginPlace
    ,t1.DestinationPlace
    ,t2a.ProductId  as MutualProducts
from Table1 t1
    left join table2 t2a    on t1.OriginPlace       = t2a.Place
    left join table2 t2b    on t1.DestinationPlace  = t2b.Place
where t2a.ProductId = t2b.ProductId