我想知道是否有一个更简单的方法来实现我的目标比我想出来的。有没有更简单的方法来编写这个查询? [MS SQL服务器]
我正在返回一个适用于对象的特定属性。对象经历多次迭代,并且属性可能会从迭代到迭代略有变化。如果属性更改,迭代只会添加到表中。所以最近的迭代可能不在表格中。
每个属性由属性ID(AttribId)和生成ID(GenId)的组合唯一标识。
Object_Table
ObjectId | AttribId | GenId
32 | 2 | 3
33 | 3 | 1
Attribute_Table
AttribId | GenId | AttribDesc
1 | 1 | Text
2 | 1 | Some Text
2 | 2 | Some Different Text
3 | 1 | Other Text
当我在特定对象上查询时,如果可能,我希望它返回完全匹配。例如,对象ID 33将返回“其他文本”。
但是,如果没有完全匹配,我想要返回最近一代(最大的Gen ID)。例如,对象ID 32将返回“一些不同的文本”。由于没有从创3属性ID 2,它使用说明从最近的这根ID属性的迭代2.
这是我想出实现这一目标:
SELECT attr.AttribDesc
FROM Attribute_Table AS attr
JOIN Object_Table AS obj
ON obj.AttribId = obj.AttribId
WHERE attr.GenId = (SELECT MIN(GenId)
FROM(SELECT CASE obj2.GenId
WHEN attr2.GenId THEN attr2.GenId
ELSE(SELECT MAX(attr3.GenId)
FROM Attribute_Table AS attr3
JOIN Object_Table AS obj3
ON obj3.AttribId = attr3.AttribId
WHERE obj3.AttribId = 2
)
END AS GenId
FROM Attribute_Table AS attr2
JOIN Object_Table AS obj2
ON attr2.AttribId = obj2.AttribId
WHERE obj2.AttribId = 2
) AS ListOfGens
)
有没有更简单的方法来实现这个目标?我觉得应该有,但我对SQL比较陌生,无法想到其他任何东西。
谢谢!