首页 > 解决方案 > 根据存储在其他数据库中的已知变量拆分一行

问题描述

我在 SAS,所以代码不是纯 MySQL。

我有一张这样的桌子

ID     Fruits
1      Apple-Water-melon
2      Pine-Apple-Kiwi

但也有另一种水果

ID     Fruits
x      Apple
x      Kiwi
x      Pine-apple
x      Water-melon

我怎么能有这样的决赛桌?

ID    Fruits
1     Apple
1     Water-melon
2     Pine-apple
2     Kiwi

如果它们与第二个表中找到的变量匹配,是否可以解析第一个表并拆分变量?

谢谢,

标签: mysqlsasproc-sql

解决方案


您可以使用 FINDW() 函数检查 FRUIT 值是否出现在 FRUITS 列表中。

data have ;
  input ID Fruits $40.;
cards;
1      Apple-Water-melon
2      Pine-Apple-Kiwi
;

data list;
  fruitid +1 ;
  input fruit $40. ;
cards;
Apple
Kiwi
Pine-apple
Water-melon
;

proc sql ;
  create table want as
  select a.*,b.* 
  from have a 
    left join list b
    on 0 ne findw(Fruits,fruit,'-','ti')
  ;
quit;

结果

Obs    ID         Fruits          fruitid    fruit

 1      1    Apple-Water-melon       1       Apple
 2      2    Pine-Apple-Kiwi         1       Apple
 3      2    Pine-Apple-Kiwi         2       Kiwi
 4      2    Pine-Apple-Kiwi         3       Pine-apple
 5      1    Apple-Water-melon       4       Water-melon

您想如何消除 PINE-APPLE 中间嵌入的 APPLE 匹配?您是否要优先考虑多个单词水果名称,然后从水果列表字符串中删除这些水果?


推荐阅读