我是Oracle SQL的新手,我很遗憾谁比较两个不同表中的两个列;与表A和表B中的last_name和first_name一样,如果两个表中的colums vlaues都匹配,则将表B中的value_id更新为表A.
答案 0 :(得分:0)
这应该使用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
位于两个表格中。