oracle sql 比较两列,如果匹配则更新 id_value 循环

oracle sql compare two columns and if match update id_value loop

我是 Oracle SQL 的新手,我不知道谁可以比较来自两个不同 table 的两个列;像 table A 和 table B 中的 last_name 和 first_name,如果两个列值在两个 table 上都匹配,则从 [ 更新 value_id =18=] B 到 table A.

这应该通过 MERGE 语句完成。
让我们构建一些示例数据:

CREATE TABLE TABLE_A (VALUE_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));
INSERT INTO TABLE_A (VALUE_ID, LAST_NAME, FIRST_NAME)
VALUES (1, 'SMITH', 'JOHN');
INSERT INTO TABLE_A (VALUE_ID, LAST_NAME, FIRST_NAME)
VALUES (2, 'ADAMS', 'JOHN');
INSERT INTO TABLE_A (VALUE_ID, LAST_NAME, FIRST_NAME)
VALUES (3, 'ADAMS', 'SAM');
INSERT INTO TABLE_B (VALUE_ID, LAST_NAME, FIRST_NAME)
VALUES (4, 'BOOTH', 'JOHN');
INSERT INTO TABLE_B (VALUE_ID, LAST_NAME, FIRST_NAME)
VALUES (5, 'HENRY', 'JOHN');
INSERT INTO TABLE_B (VALUE_ID, LAST_NAME, FIRST_NAME)
VALUES (6, 'ADAMS', 'SAM');

现在里面有什么:

SQL> select * from table_a;

  VALUE_ID LAST_NAME       FIRST_NAME
---------- --------------- ---------------
         1 SMITH           JOHN
         2 ADAMS           JOHN
         3 ADAMS           SAM

SQL> select * from table_b;

  VALUE_ID LAST_NAME       FIRST_NAME
---------- --------------- ---------------
         4 BOOTH           JOHN
         5 HENRY           JOHN
         6 ADAMS           SAM

SQL>

现在让 MERGE 他们在一起:

MERGE INTO TABLE_A A
USING (
  SELECT B.VALUE_ID, B.FIRST_NAME, B.LAST_NAME
  FROM TABLE_B b) b
ON (B.FIRST_NAME = A.FIRST_NAME AND B.LAST_NAME = A.LAST_NAME) 
WHEN MATCHED THEN UPDATE SET VALUE_ID=b.VALUE_ID
;

现在里面有什么?

SQL> select * from table_a;

  VALUE_ID LAST_NAME       FIRST_NAME
---------- --------------- ---------------
         1 SMITH           JOHN
         2 ADAMS           JOHN
         6 ADAMS           SAM

SQL> select * from table_b;

  VALUE_ID LAST_NAME       FIRST_NAME
---------- --------------- ---------------
         4 BOOTH           JOHN
         5 HENRY           JOHN
         6 ADAMS           SAM

SQL>

所以我们 MERGE VALUE_ID 进入 TABLE_A ,其中 FIRST_NAMELAST_NAME 在两个表中找到。