为什么我的桌子没有加入

时间:2014-02-23 23:08:15

标签: sql sas

我不确定为什么我的桌子没有加入。我创建了一个示例,表格应该加入,但我不确定是什么导致了这个问题。

   data Master1;
   length region $30;
   input region;
   datalines;
SANFRANCISCO-OAKLAND-SANJOSE
run;

data map;
   length market $30 code $1;
   input market code;
   datalines;
SANFRANCISCO-OAK-SANJOSE A
SEATTLE B
run;

data master1;
set master1;
region=scan(region,1,'-');
run;


proc sql noprint;
   create table a as
   select a.*, b.Code,b.market
   from Master1 a 
   left join map b
   on a.region like '%' || trim(b.market) || '%';
quit;

2 个答案:

答案 0 :(得分:2)

让我们在where子句中替换数据中的值:

a.region --> 'SANFRANCISCO-OAKLAND-SANJOSE'
b.market --> 'SANFRANCISCO-OAK-SANJOSE'

彼此不是喜欢。一个有“OAKLAND”,另一个有“OAK”。您需要修复数据。

编辑:

剥离结果后,你有:

a.region --> 'SANFRANCISCO'
b.market --> 'SANFRANCISCO-OAK-SANJOSE'
a.region like '%' || trim(b.market) || '%' --> 'SANFRANCISCO' LIKE '%SANFRANCISCO-OAK-SANJOSE%'

这仍然是假的。你有错误的顺序比较。试试这个:

 b.market like '%' || trim(a.region) || '%'

答案 1 :(得分:0)

我相信你不能创建LIKE '%...%'语句(带元字符%)作为字符表达式。

如果region始终是market子字符串,则可以使用条件

on index(b.market,trim(a.region))>0;

而不是LIKE