为什么和join子句不过滤数据

时间:2015-03-12 21:06:27

标签: oracle

编写以下代码是为了获取所有父子关系,并希望了解为什么And没有过滤记录但是在哪里。     e.g -

select 
s.name, 
s.status,
s.start_date_active,
s.end_date_active,
s.salesrep_number,

p.name Parent_name,

p.status Parent_status,
p.start_date_active Parent_start_date_active,
p.end_date_active Parent_end_date_active,

FROM XXX_XX_SALESREPS s
left outer join XXX_XX_SALESREPS p
on s.attribute1 = p.salesrep_id
**and s.attribute1 = '100003916'** 

以上查询给出表s中的所有行,不要在'100003916'上过滤它。但是当我使用..

select 
s.name, 
s.status,
s.start_date_active,
s.end_date_active,
s.salesrep_number,

p.name Parent_name,

p.status Parent_status,
p.start_date_active Parent_start_date_active,
p.end_date_active Parent_end_date_active,

FROM XXX_XX_SALESREPS s
left outer join XXX_XX_SALESREPS p
on s.attribute1 = p.salesrep_id
**where  s.attribute1 = '100003916'** 

这个查询只给我过滤记录。为什么有人可以回答它。提前谢谢。

1 个答案:

答案 0 :(得分:1)

在您的第一个案例中,and s.attribute1 = '100003916'是您加入条件的一部分 - 由于它是left outer join,因此它不会用作过滤器。