Sql server 多部分标识符1。”;ea.参数类型ID“;无法约束。2.多部分标识符“;ea.参数类型ID“;无法约束

Sql server 多部分标识符1。”;ea.参数类型ID“;无法约束。2.多部分标识符“;ea.参数类型ID“;无法约束,sql-server,Sql Server,刚刚完成评论中所说的 您已经在查询中定义了如下表别名 SELECT two.WorkOrderID, te.EquipmentID, tm.MaterialID, CodMaterial, MaterialName, EquipmentName, GoalPriceEnergyPerUnit, pt.ParameterTypeID FROM T_WorkOrders two LEF

刚刚完成评论中所说的

您已经在查询中定义了如下表别名

SELECT two.WorkOrderID,
       te.EquipmentID,
       tm.MaterialID,
       CodMaterial,
       MaterialName,
       EquipmentName,
       GoalPriceEnergyPerUnit,
       pt.ParameterTypeID
FROM   T_WorkOrders two
       LEFT OUTER JOIN T_Equipment te
                    ON te.EquipmentID = two.EquipmentID
       LEFT OUTER JOIN T_Materials tm
                    ON tm.MaterialID = two.MaterialID
       LEFT JOIN T_Parameter_Type pt
              ON ea.ParameterTypeID = pt.ParameterTypeID
WHERE  WorkOrderNumber = 2
       AND tm.MaterialID = 417
       AND te.EquipmentID = 1076
       AND ea.ParameterTypeID = 4918 
最后,您引用的列的别名不在上述任何一个列中

ea.ParameterTypeID


因此,请使用别名引用该表所属的列

您没有连接表,因为您使用了错误的别名。试着看看你的桌子

T_设备

实现

T_工作订单

查看哪一个具有可以使用ParameterTypeID“连接”到的列。 我帮不了你更多,因为你没有提供足够的关于你的桌子和你真正想做什么的信息。但无论如何,这里有一个尝试

T_Equipment te  
T_Materials tm  
T_Parameter_Type pt 
上面的代码是左连接的可能用法的示例,我正在连接不同的表。现在,正如您在注释中看到的,这将不起作用,因为代码有两个ON-s额外选项。我在这里要做的就是向你们展示你们可能错过的组合

此外,您在@TheGameiswar注释中给出的代码也不正确

SELECT two.WorkOrderID,
       te.EquipmentID,
       tm.MaterialID,
       CodMaterial,
       MaterialName,
       EquipmentName,
       GoalPriceEnergyPerUnit,
       pt.ParameterTypeID
FROM   T_WorkOrders two
       LEFT JOIN T_Equipment te
            ON te.EquipmentID = two.EquipmentID
       LEFT JOIN T_Materials tm
            ON tm.MaterialID = two.MaterialID
       LEFT JOIN T_Parameter_Type pt
       ( -- this is not correct syntax
            ON te.ParameterTypeID = pt.ParameterTypeID
            ON tm.ParameterTypeID = pt.ParameterTypeID
            ON two.ParameterTypeID = pt.ParameterTypeID
        )
WHERE  WorkOrderNumber = 2
       AND tm.MaterialID = 417
       AND te.EquipmentID = 1076
       AND ea.ParameterTypeID = 4918 

代码注释中所示的语句中缺少它。试着解决这个问题。另外,使用MicrosoftSQLServerManagementStudio还有助于编写SQL代码,因为它会在您丢失某些内容时发出警告。此外,我有时会使用视觉提示来确认我在做什么,通常这是从中发出的。

您的查询引用了一个表别名
ea
,但您没有使用此别名的表。您希望得到什么样的结果?你想做什么?我试过了,但效果不太好。选择2.WorkOrderID,te.EquipmentID,tm.MaterialID,CodMaterial,MaterialName,EquipmentName,GoalPriceEnergyPerUnit,pt.ParameterTypeID来自T_工作订单两个左外连接T_设备te在te.EquipmentID=2.EquipmentID左外连接T_材料tm在tm.MaterialID=2.MaterialID左外连接T_参数类型pt左连接T_设备地址ea在ea上。ParameterTypeID=pt.ParameterTypeID,其中WorkOrderNumber=2,tm.MaterialID=417和te.EquipmentID=1076和pt.ParameterTypeID=4918您错了,因为表T_WorkOrders中没有名为ParameterTypeID的列,因此我无法比较IDIt重要的不是列的名称,而是主键和外键的关系。问题是您需要从T_参数_类型中获取什么数据,如果您确定需要从该表中获取什么数据,那么您应该具有标识每一行的键列,通常称为nameofclumnid(以ID结尾很重要)。之后,看看是否可以使用该ID列将该列与其他表连接起来。
SELECT  two.WorkOrderID, 
        te.EquipmentID,
        tm.MaterialID,
        CodMaterial,
        MaterialName,
        Equipm‌​entName,
        GoalPriceEne‌​rgyPerUnit,
        pt.Parame‌​terTypeID 
FROM T_WorkOrders two 
    LEFT JOIN T_Equipment te 
        ON te.EquipmentID = two.EquipmentID 
    LEFT JOIN T_Materials tm 
        ON tm.MaterialID = two.MaterialID 
    LEFT JOIN T_Parameter_Type pt 
        --ON is missing, maybe something like
        -- pt.SomeID = two.SomeID
    LEFT JOIN T_Equipment_Address ea 
        ON ea.ParameterTypeID=pt.ParameterTypeID 
WHERE WorkOrderNumber=2 
      AND tm.MaterialID = 417 
      AND te.EquipmentID = 1076 
      AND pt.ParameterTypeID = 4918