And*_*rey 1 sql join ingres left-join
我正在使用 Ingres 11.0 DB 不确定它是否会在其他 DB 引擎上具有相同的行为,但就是这样
SELECT *
FROM table1 t1
LEFT JOIN table2 t2
ON t1.id = t2.fk_id
WHERE t1.code = 'CODE1' AND t2.id_number = 12174;
Run Code Online (Sandbox Code Playgroud)
不返回表 1 中的所有记录,但我使用的是左连接,它应该从 T1 返回 aa 记录,并且只从 t2 返回行,只返回 1 条记录
如果我将一个条件从 where 子句移到加入条件,它的开始返回我正是我期待的
SELECT *
FROM TABLE1 t1
LEFT JOIN TABLE2 t2
ON t1.id = t2.fk_id
AND t2.id_number = 12174
WHERE t1.code = 'CODE1';
Run Code Online (Sandbox Code Playgroud)
问题是为什么它在 where 子句中的所有搜索条件都不起作用,但是当我从 where 移动 t2.id_number 加入条件时起作用?
我想我知道答案,因为我在加入步骤中消除了 t2 中所有可能的变化,但现在不确定
您不应在 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' ;
Run Code Online (Sandbox Code Playgroud)
where 条件是 INNER JOIN 子句的等效部分,这就是您具有此行为的原因。
将条件添加到 on 子句意味着添加的条件也可以作为外部连接工作..