我有如下表(称为OptionRestriction):如何仅更新与另一个表中的一行中的值对应的一个值?
Feature_ID_1 OptionValue_1 value Feature_ID_2 OptionValue_2 visible
397 2 1 775 3 0
404 3 1 403 5 0
397 3 1 775 4 0
我用的是表中的另一个表,称为ConfigValue更新值。现在,我有以下查询做到这一点:
UPDATE
ConfigValue
SET ConfigValue.Visible = Case When (select ConfigValue.value from
ConfigValue INNER JOIN OptionRestriction
ON ConfigValue.FeatureID = OptionRestriction.Feature_ID_1
where ConfigValue.ConfigurationID=66311
AND ConfigValue.FeatureID = OptionRestriction.Feature_ID_1
AND ConfigValue.OptionValue=OptionRestriction.OptionValue_1
AND ConfigValue.value=OptionRestriction.value)=1 Then 0 Else 1 End
FROM ConfigValue
INNER JOIN OptionRestriction ON ConfigValue.FeatureID = OptionRestriction.Feature_ID_2
WHERE
ConfigValue.OptionValue = OptionRestriction.OptionValue_2
AND ConfigValue.ConfigurationID = 66311
然而,与此查询的问题是,当我比如想从功能775更新OptionValue 3可见= 0(设定值的基础上,从功能397的OptionValue 2到1),查询更新从功能775的OptionValue 3和4中的可见更新为0,而我希望它只能从OptionValue 3从功能775更新为可见。我怎样才能实现这个?
UPDATE
configvalue的初始状态(当从功能397从OptionValue值为0)是:
ConfigurationID Feature ID OptionValue Visible Value
66311 397 2 1 0
而对于FEATUREID 775选项值3和4:
ConfigurationID Feature ID OptionValue Visible Value
66311 775 3 1 0
66311 775 4 1 0
当前当来自特征ID 397的选项值2的值设置为1时:
ConfigurationID Feature ID OptionValue Visible Value
66311 397 2 1 1
发生这种情况(可见从功能775两optionvalues更新为0):
ConfigurationID Feature ID OptionValue Visible Value
66311 775 3 0 0
66311 775 4 0 0
虽然我希望这种情况发生(仅optionvalue 3从功能775更新可见为0。就像在OptionRestriction的第一行):
ConfigurationID Feature ID OptionValue Visible Value
66311 775 3 0 0
66311 775 4 1 0
当从功能ID 397从optionvalue 2的值设置为0,可见从功能775 optionvalue 3应更新回1。这就是为什么我使用的情况,我的现在查询。所以实际上,OptionRestriction表中不需要value和visible列。
如果只有'OptionValue2 = 3'应使用,只需添加这谓词WHERE – Serg
呀,但查询应该从表格中识别出正确的值。因此,例如,查询应该能够识别如果来自特征397的选项值2的值设置为1,则来自特征775的来自选项值3的可见值应该被设置为0. – user2237168
请显示ConfigValue初始状态和期望的更新结果 – Serg