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_NAME
和 LAST_NAME
在两个表中找到。
我是 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_NAME
和 LAST_NAME
在两个表中找到。