如何修改其他表中存在的行

时间:2017-03-14 08:43:34

标签: sql sas

假设我有两个表:A和B

表A:

    aaa     79506333388
    bbb     79502068252
    ccc     79139859806
    ddd     79113515443
    eee     79231128300
    fff     79194631152

表B:

79231128300
79194631152

如果表B中存在第二列中的值,我想修改A的第一列:

    aaa             79506333388
    bbb             79502068252
    ccc             79139859806
    ddd             79113515443
    MODIFIED        79231128300
    MODIFIED        79194631152

我预计,我可以实现类似:

data A;
    set A;
    if 2nd_col in B then 1st_col = 'MODIFIED';
run;

或使用proc sql:

proc sql;
    create table A as
    select *,
    (case when 2nd_col in B then 1st_col = 'MODIFIED' else 1st_col) as 1st_col_1
    from A;
    delete 1st_col;
run;

但是他们中的其他人没有用。请不要尝试简化任务,我需要完全按照我的要求去做:修改其他表中的行。

2 个答案:

答案 0 :(得分:1)

以下是在SAS中使用proc sql的简单解决方案。

data A;
input A1 $ A2;
datalines;
aaa     79506333388
bbb     79502068252
ccc     79139859806
ddd     79113515443
eee     79231128300
fff     79194631152
;
run;

data B;
input B1;
datalines;
79231128300
79194631152
;
run;

proc sql;
update A
set A1 = 'MODIFIED'
where exists (select B1 from B where A.A2=B.B1);
quit;

答案 1 :(得分:0)

从您发布的问题开始,您的问题的解决方案如下所示。

DECLARE @TABLE1 TABLE(COLUMN1 VARCHAR(50), COLUMN2 VARCHAR(50))
INSERT INTO @TABLE1 VALUES('aaa','79506333388')
INSERT INTO @TABLE1 VALUES('bbb','79502068252')
INSERT INTO @TABLE1 VALUES('ccc','79139859806')
INSERT INTO @TABLE1 VALUES('ddd','79113515443')
INSERT INTO @TABLE1 VALUES('eee','79231128300')
INSERT INTO @TABLE1 VALUES('fff','79194631152')
DECLARE @TABLE2 TABLE(COLUMN1 VARCHAR(50))
INSERT INTO @TABLE2 VALUES('79231128300')
INSERT INTO @TABLE2 VALUES('79194631152')
UPDATE T1 SET COLUMN1='MODIFIED' FROM @TABLE1 T1 JOIN @TABLE2 T2 ON > T1.COLUMN2=T2.COLUMN1
SELECT * FROM @TABLE1

输出

------------------------
COLUMN1 |   COLUMN2
------------------------
aaa     |   79506333388
bbb     |   79502068252
ccc     |   79139859806
ddd     |   79113515443
MODIFIED|   79231128300
MODIFIED|   79194631152
------------------------