更新表格中的行' A'具有值' Y',用于匹配来自不同表格的记录' B"

时间:2016-11-04 22:10:50

标签: sql

TESTDTA is the test database.
F41= First table
F42=Second table

来自F41 TABLE的数据

FLAG    STORE   NAME    NUMBER
S         1      A       A1
S         2      B       B2
S         3      C       C3

来自F42 TABLE的数据

STORE   NAME    NUMBER
1        A        A1
2        B        B2
3        C        C3
4        D        D4

我需要更新列的值" FLAG"在表格" F41"重视" P"如果表中有匹配的记录" F42"

我在SQL下面尝试过。但它有语法错误。

UPDATE TESTDATA.F41,TESTDATA.F42 SET F41.FLAG='P' 
WHERE F41.NAME=F42.NAME AND F41.NUMBER=F42.NUMBER

有人可以帮我写这个SQL吗?

提前感谢您的帮助

5 个答案:

答案 0 :(得分:0)

也许有点干净

UPDATE F41 SET FLAG='P' 
 FROM  F41 A
 JOIN  F42 B on A.NAME=B.NAME AND A.NUMBER=B.NUMBER

答案 1 :(得分:0)

如果您的DBMS是Oracle,并且如果通过"匹配记录"你的意思是F41中的所有列值都与F42匹配,那么这可能会解决你的问题:

DDL:

create tabLe F41
(
    FLAG        varchar2(10)
   ,STORE_x       number
   ,NAME_x        varchar2(10)
   ,NUMBER_x      varchar2(10)
);

create tabLe F42
(
    STORE_x       number
   ,NAME_x        varchar2(10)
   ,NUMBER_x      varchar2(10)
);

注意:将_x添加到列STORE,NAME,NUMBER,因为这些是某些DBMS中的保留字。

DML:

insert into F41 (FLAG, STORE_x, NAME_x, NUMBER_x) values ('S', 1, 'A', 'A1');
insert into F41 (FLAG, STORE_x, NAME_x, NUMBER_x) values ('S', 2, 'B', 'B2');
insert into F41 (FLAG, STORE_x, NAME_x, NUMBER_x) values ('S', 3, 'C', 'C3');

insert into F42 (STORE_x, NAME_x, NUMBER_x) values (1, 'A', 'A1');
insert into F42 (STORE_x, NAME_x, NUMBER_x) values (2, 'B', 'B2');
insert into F42 (STORE_x, NAME_x, NUMBER_x) values (3, 'C', 'C3');
insert into F42 (STORE_x, NAME_x, NUMBER_x) values (4, 'D', 'D4');

使用存在更新语句:

update  F41 t1
set     flag = 'P'
WHERE   EXISTS (SELECT  1
                FROM    F42 t2
                WHERE   t2.STORE_X  = t1.STORE_X
                AND     t2.NAME_X   = t1.NAME_X
                AND     t2.NUMBER_X = t1.NUMBER_X);    

希望这有助于!

答案 2 :(得分:0)

你可以用一个比WHERE子句更精彩的方式来做到这一点:

UPDATE TESTDATA.F41
    SET FLAG = 'P' 
    WHERE EXISTS (SELECT 1
                  FROM TESTDATE.F42
                  WHERE F41.NAME = F42.NAME AND F41.NUMBER = F42.NUMBER
                 );

这是标准SQL,应该可以在任何数据库中使用。

答案 3 :(得分:0)

UPDATE TESTDATA.F41 SET F41.FLAG='P' 
FROM TESTDATA.F42
WHERE F41.NAME = F42.NAME AND F41.NUMBER = F42.NUMBER

答案 4 :(得分:0)

UPDATE TESTDATA.F41
SET FLAG = 'P' 
WHERE EXISTS (SELECT 1
              FROM TESTDATE.F42
              WHERE F41.NAME = F42.NAME AND F41.NUMBER = F42.NUMBER
             );