加入时的重复值
Duplicate values on join
我正在尝试使用以下查询创建 table:
PROC SQL;
CREATE TABLE NEW_TABLE AS
SELECT A.* ,B.FIELD_1, B.FIELD_2
FROM TEST AS A
LEFT JOIN OTHER_TABLE AS B ON A.CONTRACT = B.CONTRACT
AND (A.CUSTOMER = B.CUSTOMER OR A.CUSTOMER_NEW = B.CUSTOMER);
QUIT;
但该查询 returns 重复值。我猜是我在连接上使用的 OR
造成的,因为在某些情况下它会匹配其中一个条件或两者。此外,我在加入之前删除了 OTHER_TABLE
上的重复项。
我怎样才能使它匹配 A.CUSTOMER = B.CUSTOMER
然后 A.CUSTOMER_NEW = B.CUSTOMER
只有当它没有找到第一个匹配项时?我正在使用左连接,因为我想保留 TEST
中的所有记录,并在检查这些条件后仍未找到任何内容时获取空值。
你使用left join,确保所有字段不相同,可能有一个字段不同
尝试两个左连接。
proc sql;
create table new_table as
select a.*
, case when (missing(b.customer)) then c.field_1 else b.field_1 as field_1
, case when (missing(b.customer)) then c.field_2 else b.field_2 as field_2
from test as a
left join other_table as b
on a.customer = b.customer and a.contract = b.contract
left join other_table as c
on a.customer_new = c.customer and a.contract = c.contract
;
quit;
我正在尝试使用以下查询创建 table:
PROC SQL;
CREATE TABLE NEW_TABLE AS
SELECT A.* ,B.FIELD_1, B.FIELD_2
FROM TEST AS A
LEFT JOIN OTHER_TABLE AS B ON A.CONTRACT = B.CONTRACT
AND (A.CUSTOMER = B.CUSTOMER OR A.CUSTOMER_NEW = B.CUSTOMER);
QUIT;
但该查询 returns 重复值。我猜是我在连接上使用的 OR
造成的,因为在某些情况下它会匹配其中一个条件或两者。此外,我在加入之前删除了 OTHER_TABLE
上的重复项。
我怎样才能使它匹配 A.CUSTOMER = B.CUSTOMER
然后 A.CUSTOMER_NEW = B.CUSTOMER
只有当它没有找到第一个匹配项时?我正在使用左连接,因为我想保留 TEST
中的所有记录,并在检查这些条件后仍未找到任何内容时获取空值。
你使用left join,确保所有字段不相同,可能有一个字段不同
尝试两个左连接。
proc sql;
create table new_table as
select a.*
, case when (missing(b.customer)) then c.field_1 else b.field_1 as field_1
, case when (missing(b.customer)) then c.field_2 else b.field_2 as field_2
from test as a
left join other_table as b
on a.customer = b.customer and a.contract = b.contract
left join other_table as c
on a.customer_new = c.customer and a.contract = c.contract
;
quit;