[英]Updating table based on the value from another table
所以我有两个表:
TEST_TABLE_A
------- ------ ------ --------
NAME VAL1 VAL2 STATUS
------- ------ ------ --------
HEAD1 100 200 ACTIVE
HEAD2 300 400 ACTIVE
HEAD3 500 600 ACTIVE
HEAD4 700 800 ACTIVE
TEST_TABLE_B
------- ------ ------
NAME VAL1 VAL2
------- ------ ------
HEAD1 1 2
HEAD2 3 4
HEAD3 500 600
我想基于表b同步表a,并且期望在表a中的位置应该是这样的
NAME VAL1 VAL2 STATUS
------- ------ ------ ----------
HEAD1 100 200 INACTIVE
HEAD1 1 2 ACTIVE
HEAD2 300 400 INACTIVE
HEAD2 3 4 ACTIVE
HEAD3 500 600 ACTIVE
HEAD4 700 800 ACTIVE
我不知道如何处理查询,请帮助我:
INSERT INTO TEST_TABLE_A (NAME,VAL1,VAL2,STATUS)
SELECT NAME, VAL1, VAL2, 'ACTIVE' FROM TEST_TABLE_B
Where TEST_TABLE_A.NAME = TEST_TABLE_B.NAME
AND TEST_TABLE_A.VAL1 != TEST_TABLE_B.VAL1
AND TEST_TABLE_A.VAL2 != TEST_TABLE_B.VAL2
AND TEST_TABLE_A.STATUS = 'ACTIVE';
UPDATE TEST_TABLE_A SET STATUS = 'INACTIVE'
Where TEST_TABLE_A.NAME = TEST_TABLE_B.NAME
AND TEST_TABLE_A.VAL1 != TEST_TABLE_B.VAL1
AND TEST_TABLE_A.VAL2 != TEST_TABLE_B.VAL2
AND TEST_TABLE_A.STATUS = 'ACTIVE';
当名称匹配但值不匹配时,第一个UPDATE状态变为无效。插入新条目,我正在为此使用MERGE。
UPDATE TEST_TABLE_A A
SET A.STATUS ='INACTIVE'
WHERE EXISTS
(
SELECT 1 FROM TEST_TABLE_B B
WHERE B."NAME" = A."NAME"
AND B."VAL1" != A."VAL1" AND B."VAL2" != A."VAL2"
);
MERGE INTO TEST_TABLE_A D
USING ( SELECT * FROM TEST_TABLE_B) S
ON ( D."NAME" = S."NAME" AND D."VAL1" = S."VAL1" AND D."VAL2"= S."VAL2")
WHEN NOT MATCHED THEN
INSERT (D."NAME", D."VAL1",D."VAL2", D."STATUS")
values (S."NAME", S."VAL1",S."VAL2", 'ACTIVE');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.