如果来自其他两个 table 的值匹配,则从 table 更新值

update value from a table if from other two table values match

我正在尝试更新大约 800 行,并且想更新 table_c 它来自 table_A 和 table_b 匹配的两个值。 Table_a 和 table_c 由 value_id 关联。

示例:

CREATE TABLE TABLE_A (VALUE_ID INTEGER, PERSON_ID INTEGER, LAST_NAME VARCHAR2(15), FIRST_NAME VARCHAR2(15));
CREATE TABLE TABLE_B (VALUE_ID INTEGER, LAST_NAME VARCHAR2(15), FIRST_NAME VARCHAR2(15), ALIAS_ID INTEGER);
CREATE TABLE TABLE_C (VALUE_ID INTEGER, ALIAS_ID INTEGER, PERSON_ID INTEGER);
-----
INSERT INTO TABLE_A (VALUE_ID, PERSON_ID, LAST_NAME, FIRST_NAME)
VALUES (1, 6069, 'SMITH', 'JOHN');
INSERT INTO TABLE_A (VALUE_ID, PERSON_ID, LAST_NAME, FIRST_NAME)
VALUES (2, 6111, 'ADAMS', 'JOHN');
INSERT INTO TABLE_A (VALUE_ID, PERSON_ID, LAST_NAME, FIRST_NAME)
VALUES (3, 6117, 'ADAMS', 'SAM');
----
INSERT INTO TABLE_B (VALUE_ID, LAST_NAME, FIRST_NAME, ALIAS_ID)
VALUES (4, 'SMITH', 'JOHN', 40856);
INSERT INTO TABLE_B (VALUE_ID, LAST_NAME, FIRST_NAME, ALIAS_ID)
VALUES (5, 'ADAMS', 'JOHN', 3425);
INSERT INTO TABLE_B (VALUE_ID, LAST_NAME, FIRST_NAME, ALIAS_ID)
VALUES (6, 'ADAMS', 'SAM', 40831);
-----
INSERT INTO TABLE_C (VALUE_ID, ALIAS_ID, PERSON_ID)
VALUES (7, 28, 6069);
INSERT INTO TABLE_C (VALUE_ID, ALIAS_ID, PERSON_ID)
VALUES (8, 1022, 6111);
INSERT INTO TABLE_C (VALUE_ID, ALIAS_ID, PERSON_ID)
VALUES (9, 40473, 6117)

我试过使用更新语句来完成这个and/or更新语句,但它不起作用。不确定我是否需要 IF/ELSE 语句。

最后,来自table B 和table C 的alias_id 必须相同。所以,这就是为什么 table_C 将被更新的原因。

这是我目前所拥有的


UPDATE TABLE_C
SET C.ALIAS_ID = (SELECT B.ALIAS_ID 
                FROM TABLE_B B
                JOIN TABLE_A A 
                ON A.FIRST_NAME = B.FIRST_NAME AND A.LAST_NAME = B.LAST_NAME);

您可以使用以下使用 UPDATE ... FROM SQL 服务器语法的查询:

UPDATE TABLE_C
SET ALIAS_ID = b.ALIAS_ID 
FROM TABLE_C AS c
INNER JOIN TABLE_A AS a ON c.PERSON_ID = a.PERSON_ID
INNER JOIN TABLE_B AS b ON a.FIRST_NAME = b.FIRST_NAME 
                           AND a.LAST_NAME = b.LAST_NAME

这在 Oracle 中可能对您有用:

MERGE
INTO TABLE_C
USING (
   SELECT c.PERSON_ID AS pid, b.ALIAS_ID AS bAlias
   FROM TABLE_C AS c
   JOIN TABLE_A AS a ON c.PERSON_ID = a.PERSON_ID
   JOIN TABLE_B AS b ON a.FIRST_NAME = b.FIRST_NAME 
                       AND a.LAST_NAME = b.LAST_NAME       
)
ON (PERSON_ID = pid)
WHEN MATCHED THEN
UPDATE
SET ALIAS_ID = bAlias;