我有下表(表OptionTest),其中声明了功能和选项(可见的零表示功能选项不可见,一个表示选项可见。对于值,零表示选项未被选中,一个选项意味着选择了一个选项):
Feature_ID | OptionValue | value | visible
---------- | ----------- | ----- | -------
300 | 1 | 1 | 1
310 | 2 | 1 | 1
我想使用下表(表OptionVisibility)来确定上表(表OptionTest)中哪些选项不可见(即visible = 0)。即OptionTest表中的Feature_ID 310中的OptionValue 2中可见的值应根据OptionVisibility表的内容更新为0,因为Feature_ID_1 300中OptionValue_1 1的值为1,而Feature_ID_2中的OptionValue_2中的值为0。
Feature_ID_1 | OptionValue_1 |value| Feature_ID_2 | OptionValue_2| visible |
------------ | ------------- |-----| ------------ | -------------| ------- |
300 | 1 | 1 | 310 | 2 |0 |
我最终提出了以下问题。但是,由于查询返回0行受到影响,我仍然遗漏了一些东西。有什么想法吗?
UPDATE
OptionTest
SET
OptionTest.Visible = OV2.visible
FROM
OptionTest
INNER JOIN OptionVisibility AS OV1 ON OptionTest.FeatureID = OV1.Feature_ID_1
INNER JOIN OptionVisibility AS OV2 ON OptionTest.FeatureID = OV2.Feature_ID_2
WHERE
OptionTest.FeatureID=OV2.Feature_ID_2 AND OptionTest.OptionValue = OV2.OptionValue_2
找到解决方案。我不得不使用左连接:
UPDATE
OptionTest
SET
OptionTest.Visible = OV2.visible
FROM
OptionTest
LEFT JOIN OptionVisibility AS OV1 ON OptionTest.FeatureID = OV1.Feature_ID_1
LEFT JOIN OptionVisibility AS OV2 ON OptionTest.FeatureID = OV2.Feature_ID_2
WHERE
OptionTest.FeatureID=OV2.Feature_ID_2 AND OptionTest.OptionValue = OV2.OptionValue_2
认为解决方案有效,但当然查询当前状态不会检查值设置为1的位置(在这种情况下,查询应检查来自Feature_ID 300的optionvalue 1的值是否设置为1)。
终于解决了这个难题
UPDATE
OptionTest
SET OptionTest.Visible = Case When (select OptionTest.value from
OptionTest
INNER JOIN OptionVisibility
ON OptionTest.FeatureID = OptionVisibility .Feature_ID_1
where OptionTest.ConfigurationID=66071
AND OptionTest.FeatureID = OptionVisibility.Feature_ID_1
AND OptionTest.OptionValue=OptionVisibility.OptionValue_1
AND OptionTest.value=1)=1 Then 0 Else 1 End
FROM OptionTest
INNER JOIN OptionVisibility ON OptionTest.FeatureID = OptionVisibility.Feature_ID_2
WHERE
OptionTest.OptionValue = OptionVisibility.OptionValue_2
AND OptionTest.ConfigurationID = 66071
答案 0 :(得分:0)
试试这些..
UPDATE tableOne
SET tableOne.Feature_ID= tableTwo.Feature_ID_1,
tableOne.OptionValue= tableTwo.OptionValue_1 ,
tableOne.value= tableTwo.value_1 ,
tableOne.visible= tableTwo.visible FROM tableOne INNER JOIN tableTwo ON tableOne .Feature_ID = tableTwo.Feature_ID_1