Учитывая, что вы хотите сохранить оба набора данных и что вы выполняете левое соединение, тогда
SQL> create table table_a ( code varchar2(3) , name varchar2(10) , g_name varchar2(100) default 'xxxxxxxxx' ) ;
SQL> create table table_b ( othercode varchar2(3) , name varchar2(20) , description varchar2(40) default 'yyyyyyy' )
2 ;
После вставки некоторых записей для примера
SQL> select * from table_a ;
COD NAME G_NAME
--- ---------- --------------------
AAA Job2 xxxxxxxxx
AAA AB-Job1 xxxxxxxxx
AAA AB-Job2 xxxxxxxxx
AAA AB-Job3 xxxxxxxxx
SQL> select * from table_b ;
OTH NAME DESCRIPTION
--- -------------------- ----------------------------------------
111 Job1 yyyyyyy
112 AB-Job1 yyyyyyy
113 AB-Job5 yyyyyyy
114 DPF-AB-Job2 yyyyyyy
115 DPF-AB-Job3 yyyyyyy
SQL>
Теперь, если мы запускаем ваш запрос:
SQL> SELECT a.code, b.othercode, a.name, b.name ,b.description
FROM table_a a
LEFT JOIN table_b b
ON a.name = b.name
where a.name like 'AB-%' 2 3 4 5 ;
COD OTH NAME NAME DESCRIPTION
--- --- ---------- -------------------- ----------------------------------------
AAA 112 AB-Job1 AB-Job1 yyyyyyy
AAA AB-Job2
AAA AB-Job3
SQL>
вы получаете все записи из table_b, которые соответствуют условию, плюс все записи из table_a, которые не соответствуют. Если вам нужны записи, соответствующие другому условию, вы можете использовать UNION.
SELECT a.code, b.othercode, a.name, sysdate ,b.description
FROM table_a a
LEFT JOIN table_b b
ON a.name = b.name
where a.name like 'AB-%'
union
SELECT a.code, b.othercode, a.name, sysdate ,b.description
FROM table_a a
LEFT JOIN table_b b
ON a.name = replace(b.name,'DPF-','')
where a.name like 'AB-%'
COD OTH NAME SYSDATE DESCRIPTION
--- --- ---------- --------- ----------------------------------------
AAA 112 AB-Job1 11-JUL-20 yyyyyyy
AAA 114 AB-Job2 11-JUL-20 yyyyyyy
AAA 115 AB-Job3 11-JUL-20 yyyyyyy
AAA AB-Job2 11-JUL-20
AAA AB-Job3 11-JUL-20
В этом случае у вас есть оба набора данных, но вы получили пустое описание из-за левого соединения. Разница в результатах с обычным внутренним соединением покажет вам, что
SELECT a.code, b.othercode, a.name, sysdate ,b.description
2 FROM table_a a
3 JOIN table_b b
4 ON a.name = b.name
5 where a.name like 'AB-%'
6 union
7 SELECT a.code, b.othercode, a.name, sysdate ,b.description
8 FROM table_a a
9 JOIN table_b b
10 ON a.name = replace(b.name,'DPF-','')
11* where a.name like 'AB-%'
SQL> /
COD OTH NAME SYSDATE DESCRIPTION
--- --- ---------- --------- ----------------------------------------
AAA 112 AB-Job1 11-JUL-20 yyyyyyy
AAA 114 AB-Job2 11-JUL-20 yyyyyyy
AAA 115 AB-Job3 11-JUL-20 yyyyyyy
SQL>
Не стесняйтесь задавать любые сомнения, которые могут у вас возникнуть. Надеюсь, это поможет