左连接和连接条件中的条件
left join and where condition in joining condition
我正在使用 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;
不会 return 来自 table 1 的所有记录,但我正在使用左连接,这应该 return aa 来自 T1 的记录并且只处理来自 t2 的行
,return只有1条记录
如果我将一个条件从 where 子句移动到加入条件它的开始 return 我正是我所期待的
SELECT *
FROM TABLE1 t1
LEFT JOIN TABLE2 t2
ON t1.id = t2.fk_id
AND t2.id_number = 12174
WHERE t1.code = 'CODE1';
问题是为什么 where 子句中的所有搜索条件都不起作用,但当我将 t2.id_number 从 where 移动到连接条件时却起作用?
我想我知道答案,因为我在加入步骤中消除了 t2 中所有可能的变化,但现在不确定
您不应在 where 条件中使用与左 table 相关的列(这作为 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' ;
where 条件是 INNER JOIN 子句的等效部分,这就是您出现这种行为的原因。
将条件添加到 on 子句意味着添加的条件也可以用作外部连接..
我正在使用 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;
不会 return 来自 table 1 的所有记录,但我正在使用左连接,这应该 return aa 来自 T1 的记录并且只处理来自 t2 的行 ,return只有1条记录
如果我将一个条件从 where 子句移动到加入条件它的开始 return 我正是我所期待的
SELECT *
FROM TABLE1 t1
LEFT JOIN TABLE2 t2
ON t1.id = t2.fk_id
AND t2.id_number = 12174
WHERE t1.code = 'CODE1';
问题是为什么 where 子句中的所有搜索条件都不起作用,但当我将 t2.id_number 从 where 移动到连接条件时却起作用?
我想我知道答案,因为我在加入步骤中消除了 t2 中所有可能的变化,但现在不确定
您不应在 where 条件中使用与左 table 相关的列(这作为 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' ;
where 条件是 INNER JOIN 子句的等效部分,这就是您出现这种行为的原因。
将条件添加到 on 子句意味着添加的条件也可以用作外部连接..