SQL连接在一列中缺少值

时间:2014-11-05 14:40:51

标签: mysql sql-server join

我尝试创建一个SQL查询,该查询使用一个表来计算我们公司在每个机箱中的刀片服务器数量,并将这些服务器分组,同时将其与另一个表中的机箱信息相连接。

但是,其中一个机箱中没有刀片,因此刀片库存表中不会显示该名称。使用INNER JOIN创建一个表格,该表格不包含任何容量的刀片。 LEFT JOIN实现了相同的效果,但是RIGHT JOIN为我提供了一个额外的行,其机箱名称为空值。

我猜这是因为第一个表中不存在该刀片名称优先于第二个,但不确定如何纠正。截至目前,我的查询看起来像这样:

SELECT e.EnclosureName, e.PDUName, q.Blades, r.Serial#
  FROM bladeinventory.table e JOIN
(
    SELECT EnclosureName,COUNT(*) Blades 
      FROM bladeinventory.table
      GROUP BY EnclosureName
) q ON e.EnclosureName = q.EnclosureName
LEFT JOIN chassisinventory.table r
ON e.EnclosureName = r.EnclosureName
GROUP BY e.EnclosureName, e.PDUName, q.Blades, r.Serial#

是否可以通过查询实际生成具有0个刀片的机箱名称来编辑它?

2 个答案:

答案 0 :(得分:1)

只需从chassisinventory表中提取名称即可。我将使用coalesce(),以防您再次切换join的顺序:

SELECT COALESCE(r.EncloseName, e.EnclosureName) as EnclosureName, e.PDUName, q.Blades, r.Serial#
FROM bladeinventory.table e JOIN
     (SELECT EnclosureName,COUNT(*) Blades 
      FROM bladeinventory.table
      GROUP BY EnclosureName
     ) q
     ON e.EnclosureName = q.EnclosureName LEFT JOIN
     chassisinventory.table r
     ON e.EnclosureName = r.EnclosureName
GROUP BY COALESCE(r.EncloseName, e.EnclosureName), e.PDUName, q.Blades, r.Serial#;

答案 1 :(得分:0)

您也可以使用以下代码,使用更简单有效的案例

SELECT e.EnclosureName, r.PDUName, 
case when q.Blades IS NULL then 0 
else q.Blades end Blades, 
e.Serial#
FROM chassisinventory.table e
LEFT OUTER JOIN bladeinventory.table r on e.EnclosureName = r.EnclosureName
LEFT OUTER JOIN (SELECT EnclosureName,COUNT(*) Blades 
  FROM bladeinventory.table
  GROUP BY EnclosureName
) q on e.EnclosureName = q.EnclosureName