条件SQL使用第3个表加入

时间:2013-04-02 12:26:49

标签: sql sql-server tsql

我遇到了一个资产数据库问题,我一直在为MSSQL中的客户开发。需要捕获Required Actions,例如Lifting Equipment在特定位置需要在购买后6个月进行检查。这些必需操作的Due Dates可以通过不同方式计算,但此处的简化将根据其Purchase Date进行计算。

为此,我有一个名为tblActionsRequired的表,其中包含以下相关字段:

  • ActionID - 需要采取的措施
  • EquipmentCategoryIDEquipmentTypeIDEquipmentID - 因此需要其中一个字段。通过这种方式,他们指定某类设备或设备类型或特定设备需要采取措施。例如,一个2公斤的粉末消防栓将是一种设备类型,它将属于消防安全设备类别,可能会有一个特定的2公斤粉末消防栓,资产编号为PFH2KG001。
  • BasedAtID - 公司的分支机构或网站

理想情况下,我想要做的是尽可能多地保留在一个查询中,而不是为每个组合创建单独的查询或视图,然后使用UNION将它们添加到一起。我有几个其他类似的字段,通过这些字段可以分割这些必需的操作,所以这里看起来很简单,只是使用工会,但我已经计算出我需要满足48种不同的组合,并且可能为每个组合创建一个视图,然后UNION它们一起!

接下来我的tblEquipment包含以下相关密钥:

  • EquipmentID - 主键
  • EquipmentTypeID =外键,设备类型此资产是
  • 的成员
  • BasedAtID - 外键,资产所在的网站

Equipment Types然后属于Equipment Categories,然后类别允许构建具有父子关系的树结构,但是我认为我已经充分注意创建一个名为{{1的视图使用以下字段:

  • vwCategoryTree
  • ParentCategoryID

此视图已经过测试并且检查结果很好,它会切断树形结构,并允许您使用EquipmentTypeIDEquipmentTypeID及其最终父母之间执行连接。

我需要帮助的是如何根据EquipmentCategoryID,EquipmentTypeID或EquipmentID中的哪个字段具有值,在tblActionsRequired和tblEquipment之间进行某种条件连接。如果只能指定EquipmentID或EquipmentTypeID,那么我认为这样可行:

EquipmentCategoryID

但是,如何将第三个表格引入此联接以满足EquipmentCategoryID或至少避免使用UNION?

对不起,如果没有意义,请问!非常感谢你!

1 个答案:

答案 0 :(得分:1)

一种可能的方法:

select ...
from tblEquipment e
left join vwCategoryTree c on e.EquipmentTypeID = c.EquipmentTypeID
join tblActionsRequired r 
  on (e.EquipmentID = r.EquipmentID or 
      e.EquipmentTypeID = r.EquipmentTypeID or 
      c.ParentCategoryID = r.EquipmentCategoryID)