I have a table TABLE1 with 3 columns NAME, ROLLNO, CASHDATE.
CREATE TABLE TABLE1
(
NAME VARCHAR2(4) NOT NULL,
ROLLNO NUMBER(4) NOT NULL,
CASHDATE VARCHAR2(8) NOT NULL
);
INSERT INTO TABLE1 VALUES('SAMY', 1234, '15990101');
INSERT INTO TABLE1 VALUES('TOMY', 1324, '15990101');
INSERT INTO TABLE1 VALUES('DANY', 1342, '15990101');
TABLE1 looks like:
NAME ROLLNO CASHDATE
----------------------------------
SAMY 1234 15990101
TOMY 1324 15990101
DANY 1342 15990101
CASHDATE value is in the form of YYYYMMDD
I have a second table TABLE2 with 3 columns NAME, ID, ID_DATE:
CREATE TABLE TABLE2
(
NAME VARCHAR2(4) NOT NULL,
ID VARCHAR2(2) NOT NULL,
ID_DATE TIMESTAMP(3)
);
INSERT INTO TABLE2 VALUES('SAMY', '01', timestamp '2021-08-21 00:00:00');
INSERT INTO TABLE2 VALUES('SAMY', 'A1', timestamp '2018-08-19 00:00:00');
INSERT INTO TABLE2 VALUES('TOMY', '01', timestamp '2021-08-22 00:00:00');
INSERT INTO TABLE2 VALUES('TOMY', 'B1', timestamp '2000-08-15 00:00:00');
TABLE2 looks like:
NAME ID ID_DATE
--------------------------------------------------------
SAMY 01 21-AUG-2021 12.00.00.000000000 AM
SAMY A1 19-AUG-2018 12.00.00.000000000 AM
TOMY 01 22-AUG-2021 12.00.00.000000000 AM
TOMY B1 15-AUG-2000 12.00.00.000000000 AM
And I have a third table TABLE3 with 2 columns NAME, SEC_DATE:
CREATE TABLE TABLE3
(
NAME VARCHAR2(4) NOT NULL,
SEC_DATE TIMESTAMP(3)
);
INSERT INTO TABLE3 VALUES('SAMY', timestamp '2021-08-21 00:00:00');
INSERT INTO TABLE3 VALUES('TOMY', timestamp '2021-08-22 00:00:00');
INSERT INTO TABLE3 VALUES('DANY', timestamp '2021-08-29 00:00:00');
TABLE3 looks like:
NAME SEC_DATE
----------------------------------------------
SAMY 21-AUG-2021 12.00.00.000000000 AM
TOMY 22-AUG-2021 12.00.00.000000000 AM
DANY 29-AUG-2021 12.00.00.000000000 AM
As we see I have a TABLE1 having CASHDATE value as 15990101 which is default value.
So we need to UPDATE CASHDATE column which is having 15990101 in TABLE1 based on following conditions.
- First it checks in TABLE2 based on NAME in TABLE2, if there is a record having same NAME with ID = '01' then ID_DATE value should update in CASHDATE column of TABLE1.
- If it is not found in TABLE2 based on NAME with ID = '01', then it checks in TABLE3 and based on NAME only if there is a record, we need to update (SEC_DATE - 1) value in CASHDATE column of TABLE1.
Finally after update, the result TABLE1 looks like:
NAME ROLLNO CASHDATE
----------------------------------
SAMY 1234 20210821 --This record found in TABLE2
TOMY 1324 20210822 --This record found in TABLE2
DANY 1342 20210828 --This record found in TABLE3 (SEC_DATE - 1)
I understand we need to update statement but I am not sure using CASE WHEN in UPDATE statement.