SQL服务器在同一个表上连接两次,以根据另一列中的记录更新列的记录

时间:2017-08-25 07:12:05

标签: sql-server sql-update

我有下表(表ConfigValue),其中声明了功能和选项(可见的零表示该功能的选项不可见,一个表示该选项可见。对于值,零表示选项未被选中,一个选项意味着选择了一个选项):

Feature_ID | OptionValue | value | visible
---------- | ----------- | ----- | -------
300        | 1           | 0     | 1
310        | 2           | 0     | 1

我想使用下表(表OptionValue)来创建选项之间的依赖关系。在这种情况下,当选择来自特征300的选项1(即值= 1)时,来自特征310的选项2不应该是可见的(即,可见= 0)。另一方面,当未选择来自特征300的选项1时,应该可以看到来自特征310的选项2。

Feature_ID_1 | OptionValue_1 | Feature_ID_2 | OptionValue_2 | 
------------ | ------------- | ------------ | ---------
300          | 1             | 310          | 2

我想将上述内容翻译成更新语句,但我不知道从哪里开始。

根据Squirrel的回答进行更新

以下select语句产生正确的输出

Select CF.FeatureID    As Feature_ID_1, 
   CF.OptionValue  As OptionValue_1,
   CF.value AS Value_1,
   CF.visible AS Visible_1,
   OV.FeatureID    As Feature_ID_2, 
   OV.OptionValue    As OptionValue_2, 
   OV.value AS Value_2,
   Case When CF.Value = 1 Then 0 Else 1 End As Visible_2
   From   [VlastuinTEST].[dbo].[ConfigValue] as CF
   Cross Join [VlastuinTEST].[dbo].[ConfigValue] as OV
   Where  CF.FeatureID = 300
   And    OV.FeatureID = 310

当选择了来自要素300的选项1时,从要素310返回选项2的可见为0。但是,我确实需要第二个表,因为我想用选择其他选项时不应显示的选项组合填充此表(因此在OptionValue中feature_ID_1和OptionValue_1应表示ConfigValue中的Feature_ID和OptionValue,其中value为1,而Feature_ID_2和OptionValue_2应表示ConfigValue中的Feature_ID和OptionValue,其中visible应更新为0)。

在这种情况下,我如何仍然使用OptionValue表?另外,需要更改哪些内容才能对选择查询进行更新查询?

1 个答案:

答案 0 :(得分:0)

这就是你想要的吗?

Select CF.FeatureID    As Feature_ID_1, 
       CF.OptionValue  As OptionValue_1,
       OV.FeatureID    As Feature_ID_2, 
       Case When CF.OptionValue = 1 Then 0 Else 1 End As OptionValue_2
From   [VlastuinTEST].[dbo].[ConfigValue] as CF
Cross Join [VlastuinTEST].[dbo].[ConfigValue] as OV
Where  CF.FeatureID = 300
And    OV.FeatureID = 310