由于您没有发布任何示例数据,我自己做了一些。
SQL> with
2 employees (employee_id, first_name, last_name) as
3 (select 1, 'Freya', 'Gomez' from dual union all
4 select 2, null , null from dual union all
5 select 9, 'Lily' , 'Marlen' from dual
6 ),
7 orders (salesman_id, order_id) as
8 (select 2, 100 from dual union all
9 select 9, 900 from dual
10 )
11 select e.employee_id,
12 e.first_name ||', '|| e.last_name full_name,
13 o.order_id
14 from employees e left join orders o on o.salesman_id = e.employee_id
15 order by e.employee_id;
EMPLOYEE_ID FULL_NAME ORDER_ID
----------- ------------- ----------
1 Freya, Gomez
2 , 100
9 Lily, Marlen 900 --> you want to get rid of this row
-- because Lily ends with a "y"
SQL>
如果您添加 WHERE 子句(第 15 行),您将得到 错误 结果,因为 - 正如您所说 - 您想保留 逗号 行:
<snip>
11 select e.employee_id,
12 e.first_name ||', '|| e.last_name full_name,
13 o.order_id
14 from employees e left join orders o on o.salesman_id = e.employee_id
15 where substr(e.first_name, -1) <> 'y'
16 order by e.employee_id;
EMPLOYEE_ID FULL_NAME ORDER_ID
----------- ------------- ----------
1 Freya, Gomez
SQL>
NVL 来救援!见第 15 行:
<snip>
11 select e.employee_id,
12 e.first_name ||', '|| e.last_name full_name,
13 o.order_id
14 from employees e left join orders o on o.salesman_id = e.employee_id
15 where nvl(substr(e.first_name, -1), ',') <> 'y' --> this
16 order by e.employee_id;
EMPLOYEE_ID FULL_NAME ORDER_ID
----------- ------------- ----------
1 Freya, Gomez
2 , 100
SQL>