左连接和连接条件中的条件

时间:2017-11-26 20:54:56

标签: sql join left-join ingres

我正在使用Ingres 11.0 DB,不确定它是否会在其他数据库引擎上有相同的行为,但这里是

select * FROM table1 t1 left join table2 t2 ON t1.id = t2.fk_id WHERE t1.code = 'CODE1' AND t2.id_number = 12174; enter image description here

不会返回表1中的所有记录,但是我使用的是左连接,它应该从T1返回一个记录,并且只从t2中加工一行  ,只返回1条记录

如果我将一个标准从where子句移动到join条件,那么它的起始返回我正是我所期待的 SELECT * FROM TABLE1 t1 left join TABLE2 t2 ON t1.id = t2.fk_id AND t2.id_number = 12174 WHERE t1.code = 'CODE1';

enter image description here

问题是为什么它不能在where子句中的所有搜索条件下工作,但是当我从哪里移动t2.id_number时工作?

我想我知道答案,因为我在连接步骤中消除了t2中所有可能的变化,但现在确定

1 个答案:

答案 0 :(得分:2)

你不应该在where where条件(这个工作作为INNER JOIN)中使用与左表相关的列,在相关的ON子句中移动左连接的条件

 select *  
 FROM   table1 t1
 left join table2 t2
          ON t1.id = t2.fk_id AND t2.id_number = 12174
 WHERE  t1.code = 'CODE1' ;

条件是INNER JOIN子句的等效部分,这就是你有这种行为的原因..

将条件添加到on子句意味着添加的条件也可用作外连接..