我有两张桌子:
表1:
表2:
我希望使用橱柜类型和面板类型作为连接功能将这些表连接在一起,并从表 1 中提取表 2 的过程列中没有“排除”的所有内容。但是,表 2 中有一个条目 idindex 32826 没有橱柜类型和面板类型,我仍然希望提取此数据。我不想要表2过程中有“排除”的数据,其他我想要的。
我希望输出看起来像这样 这是我的声明,但它没有按计划工作:
Select Table1.idindex,Table1.idCabinet,Table1.idCabinetName,Table1.CabinetType,Table1.PanelType,rack
from Table1,Table2
Where (Table1.Cabinettype=Table2.CabinetType AND
Table1.PanelType=Table2.PanelType AND
Table2.process<>'exclude') OR NULL
ORDER BY idindex
这是学习外连接语法的绝佳机会,外连接语法自 1992 年起就成为标准。确实如此。为了向后兼容,仍然支持旧的逗号样式连接语法,但它在 30 多年前就已经过时了。
SELECT Table1.idindex, Table1.idCabinet, Table1.idCabinetName, Table1.CabinetType, Table1.PanelType, rack
FROM Table1 LEFT OUTER JOIN Table2
ON Table1.Cabinettype=Table2.CabinetType
AND Table1.PanelType=Table2.PanelType
AND Table2.process<>'exclude'
ORDER BY idindex
左外连接返回左表中的行,无论连接表中是否有匹配的行。
连接表的匹配行是满足连接的完整条件的行(在本例中为三个术语)。
如果没有找到匹配的行,则返回左表中的行,该行对于连接表的所有列均为 NULL。
使用旧的逗号式连接语法没有任何好处。它相当于新语法中的
INNER JOIN
。您可能仍然会在旧书或教程中看到逗号样式连接的示例,但您可以像某人展示 Windows 3.1 的示例一样对待它。这确实发生过,但目前已经不属于历史了。
另外:正确拼写“排除”。