mysql 连接缺少连接的表

问题描述 投票:0回答:1

我有两张桌子:

表1:

enter image description here

表2:

enter image description here

我希望使用橱柜类型和面板类型作为连接功能将这些表连接在一起,并从表 1 中提取表 2 的过程列中没有“排除”的所有内容。但是,表 2 中有一个条目 idindex 32826 没有橱柜类型和面板类型,我仍然希望提取此数据。我不想要表2过程中有“排除”的数据,其他我想要的。

enter image description here

我希望输出看起来像这样 这是我的声明,但它没有按计划工作:

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
mysql
1个回答
0
投票

这是学习外连接语法的绝佳机会,外连接语法自 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 的示例一样对待它。这确实发生过,但目前已经不属于历史了。

另外:正确拼写“排除”。

© www.soinside.com 2019 - 2024. All rights reserved.