即使缺少连接,SQl也会查询内部联接以返回可用数据

时间:2014-06-11 17:59:11

标签: sql

我仍然在处理这个查询,它正在运行,但没有返回我需要的数据。

SELECT     prod.Code,
           prod.Description,
           prod.Groupp,
           prod.Quantity,
           prod.Unit,
           prod.Standard,
           prod.Type,
           prod.Model,
           prod.GroupBKM,
           prod.Note,
           comp.Unit,
           comp.Cost

FROM           dbo.Product1 prod    
INNER JOIN     dbo.Components comp
ON             comp.Code = prod.Code

以上查询仅在comp.code = prod.code存在的情况下返回数据,而我想获取数据prod。*在任何情况下显然数据相关comp.cost,如果不存在,将是空的。 我做不到!任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

INNER JOIN替换为LEFT JOIN

SELECT     prod.Code,
           prod.Description,
           prod.Groupp,
           prod.Quantity,
           prod.Unit,
           prod.Standard,
           prod.Type,
           prod.Model,
           prod.GroupBKM,
           prod.Note,
           comp.Unit,
           comp.Cost

FROM           dbo.Product1 prod    
LEFT JOIN     dbo.Components comp
ON             comp.Code = prod.Code

答案 1 :(得分:2)

根据定义,您无法使用INNER JOIN执行此操作,因为INNER JOIN被定义为仅返回找到匹配项的项目。

如果您想要返回基本SELECT中的行,即使JOIN谓词失败,那么您需要一个LEFT OUTER JOIN ...,其定义正是如此。

答案 2 :(得分:1)

来自维基百科:

  

外连接不需要两个连接表中的每个记录   有匹配的记录。连接表保留每条记录 - 即使   没有其他匹配记录。外连接进一步细分为   左外连接,右外连接和全外连接,取决于   保留表的行(左,右或两者)。

在您的情况下,请将INNER JOIN替换为LEFT OUTER JOIN