【发布时间】:2017-11-26 20:54:56
【问题描述】:
我正在使用 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;
不返回表 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';
问题是为什么它在 where 子句中的所有搜索条件都不起作用,但是当我将 t2.id_number 从 where 加入条件时起作用?
我想我知道答案,因为我在加入步骤中消除了 t2 中所有可能的变化,但现在不确定
【问题讨论】:
-
了解 LEFT JOIN ON 返回的内容:INNER JOIN ON 行 UNION ALL 不匹配的左表行,由 NULL 扩展。作为 OUTER JOIN 的一部分,始终知道您想要什么 INNER JOIN。 WHERE 或 INNER JOIN ON 在 OUTER JOIN ON 删除任何由 NULL 扩展的行后,需要右 [sic] 表列不为 NULL,即只留下 INNER JOIN ON 行,即“将 OUTER JOIN 转换为 INNER JOIN”。你有那个。
-
请use text, not images/links, for text--including tables & ERDs. 转述或引用其他文本。仅将图像用于无法表达为文本或增强文本的内容。无法搜索或剪切和粘贴图像。在图像中包含图例/键和说明。让您的帖子自成一体。