TESTDTA is the test database.
F41= First table
F42=Second table
Data from F41 TABLE
FLAG STORE NAME NUMBER
S 1 A A1
S 2 B B2
S 3 C C3
Data from F42 TABLE
STORE NAME NUMBER
1 A A1
2 B B2
3 C C3
4 D D4
I need to update values for the column "FLAG" in the tabel "F41" to value "P" if there is a matching record in the table "F42" .
I tried below SQL. But it has syntax error.
UPDATE TESTDATA.F41,TESTDATA.F42 SET F41.FLAG='P'
WHERE F41.NAME=F42.NAME AND F41.NUMBER=F42.NUMBER
Can anyone help me to write this SQL?
Thanks in advance for your help
Perhaps a little cleaner
UPDATE F41 SET FLAG='P'
FROM F41 A
JOIN F42 B on A.NAME=B.NAME AND A.NUMBER=B.NUMBER
if your DBMS is Oracle and If by "matching records" you mean all column values in F41 match F42 then this might answer your problem:
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)
);
Note: Added _x to the Columns STORE, NAME, NUMBER because those are reserved words in some 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 Statement Using Exists:
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);
Hope this Helps!
You can do this with nothing more fancy than a WHERE
clause:
UPDATE TESTDATA.F41
SET FLAG = 'P'
WHERE EXISTS (SELECT 1
FROM TESTDATE.F42
WHERE F41.NAME = F42.NAME AND F41.NUMBER = F42.NUMBER
);
This is standard SQL and should work in any database.
UPDATE TESTDATA.F41 SET F41.FLAG='P'
FROM TESTDATA.F42
WHERE F41.NAME = F42.NAME AND F41.NUMBER = F42.NUMBER
UPDATE TESTDATA.F41
SET FLAG = 'P'
WHERE EXISTS (SELECT 1
FROM TESTDATE.F42
WHERE F41.NAME = F42.NAME AND F41.NUMBER = F42.NUMBER
);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.