我有如下表(稱爲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