[英]Update rows in table 'A' with value 'Y', for matching records from a different table 'B"
TESTDTA is the test database.
F41= First table
F42=Second table
來自F41表格的數據
FLAG STORE NAME NUMBER
S 1 A A1
S 2 B B2
S 3 C C3
來自F42表格的數據
STORE NAME NUMBER
1 A A1
2 B B2
3 C C3
4 D D4
如果表“ F42”中有匹配的記錄,則需要將表“ F41”中列“ FLAG”的值更新為值“ P”。
我嘗試下面的SQL。 但是它有語法錯誤。
UPDATE TESTDATA.F41,TESTDATA.F42 SET F41.FLAG='P'
WHERE F41.NAME=F42.NAME AND F41.NUMBER=F42.NUMBER
誰能幫我寫這個SQL嗎?
在此先感謝您的幫助
也許有點清潔
UPDATE F41 SET FLAG='P'
FROM F41 A
JOIN F42 B on A.NAME=B.NAME AND A.NUMBER=B.NUMBER
如果您的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)
);
注意:在列STORE,NAME和NUMBER中添加了_x,因為它們是某些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);
希望這可以幫助!
您可以通過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,可以在任何數據庫中使用。
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
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.