不同列号的两个SELECT的SQL-UNION产生空值

时间:2013-07-09 08:52:27

标签: mysql sql select union

因此,我目前正在使用EVE静态数据库导出,并且在尝试报告我的其余程序所需的值列表时遇到了麻烦。我目前正在尝试使用以下内容获取蓝图所需的typeID,名称,浪费和数量:

SELECT typeid,name,waste,greatest(0,sum(quantity)) quantity FROM ( 
    SELECT invTypes.typeid typeid,invTypes.typeName name,null AS waste,quantity 
    FROM invTypes,invTypeMaterials 
    WHERE invTypeMaterials.materialTypeID=invTypes.typeID 
    and invTypeMaterials.TypeID=@paramID 
  UNION 
    SELECT invTypes.typeid typeid,invTypes.typeName name,invBlueprintTypes.wasteFactor 
    waste, invTypeMaterials.quantity*r.quantity*-1 quantity 
    FROM invTypes,invTypeMaterials,ramTypeRequirements r,invBlueprintTypes 
    WHERE invTypeMaterials.materialTypeID=invTypes.typeID 
    and invTypeMaterials.TypeID =r.requiredTypeID 
    and r.typeID = invBlueprintTypes.blueprintTypeID and r.activityID = 1 
    and invBlueprintTypes.productTypeID=@paramID and r.recycle=1 
) t GROUP BY typeid,name

现在,这个SQL改编自前一组没有返回浪费值的代码。 wasteFactor存储在数据库的invBlueprintTypes表中。每当我运行我的程序并使用这个函数时(我有一组单独的代码将值加载到C#List数组中,并且当前只是忽略了对“name”值的获取),浪费总是以null值的形式返回。我假设这是因为我正在做“null AS waste”,但我不知道如何在没有这个的情况下合并两个SELECT函数,因为第一个SELECT最初只选择了3个值。如果有人知道如何调整我的代码,我会非常感激,因为我对SQL很新,这有点超出了我的知识范围。谢谢!

2 个答案:

答案 0 :(得分:0)

SELECT typeid,name,max(waste),greatest(0,sum(quantity)) quantity FROM (  ....

答案 1 :(得分:-1)

而不是使用(Union)将其替换为(Union All)