在SQL更新中使用Distinct

在SQL更新中使用Distinct,sql,sql-server,sql-update,distinct,Sql,Sql Server,Sql Update,Distinct,以下是我需要转换为更新的选择: SELECT DISTINCT f.SectionID, f.Name, v.Enabled FROM SETTING_VALUE v INNER JOIN SETTING s ON v.SettingID = s.SettingID INNER JOIN LU_FIELD f ON f.FieldID = s.FieldID WHERE v.DisplayValue LIKE '%Miami%' AND f.ControlName LIKE '%City%'

以下是我需要转换为更新的选择:

SELECT DISTINCT f.SectionID, f.Name, v.Enabled
FROM SETTING_VALUE v
INNER JOIN SETTING s ON v.SettingID = s.SettingID
INNER JOIN LU_FIELD f ON f.FieldID = s.FieldID
WHERE v.DisplayValue LIKE '%Miami%'
AND f.ControlName LIKE '%City%'
我的尝试:

UPDATE SETTING_VALUE
SET Enabled = 0
FROM SETTING_VALUE v
INNER JOIN SETTING s ON v.SettingID = s.SettingID
INNER JOIN LU_FIELD f ON f.FieldID = s.FieldID
WHERE v.DisplayValue LIKE '%Miami%'
AND f.ControlName LIKE '%City%'

不确定如何应用Distinct

您可以尝试以下方法

UPDATE v
SET Enabled = 0 
FROM SETTING_VALUE v 
WHERE EXISTS(
   select * from SETTING s 
   INNER JOIN LU_FIELD f ON f.FieldID = s.FieldID 
   WHERE v.DisplayValue LIKE '%Miami%' 
   AND f.ControlName LIKE '%City%' 
   AND v.SettingID = s.SettingID
) 

选项1:使用临时表保存初始查询结果,然后根据查询结果进行更新

备选案文2:

Insert into SETTING_VALUE
(SectionID, Name, Enabled)
SELECT DISTINCT f.SectionID, f.Name, v.Enabled
FROM SETTING_VALUE v
INNER JOIN SETTING s ON v.SettingID = s.SettingID
INNER JOIN LU_FIELD f ON f.FieldID = s.FieldID
WHERE v.DisplayValue LIKE '%Miami%'
AND f.ControlName LIKE '%City%'

根据您的评论,
所有匹配的行都应该更新
您不需要区分。只需执行以下操作:

UPDATE SETTING_VALUE
SET Enabled = 0
FROM SETTING_VALUE v
INNER JOIN SETTING s ON v.SettingID = s.SettingID
INNER JOIN LU_FIELD f ON f.FieldID = s.FieldID
WHERE v.DisplayValue LIKE '%Miami%'
AND f.ControlName LIKE '%City%'

您在select中看到的所有内容都将更新。

您所说的
update distinct
是什么意思?你能给我们看一下更新前后的数据吗?在更新数据之前,使用
选择
查看数据做得很好。不过,我不知道为什么要使用
不同的
投影。不应该更新所有匹配的行吗?我看不出
DISTINCT
在逻辑上有什么意义。是的,SQL Server。是,应更新所有匹配行。它只是将1设置为0。也许我不需要区分。
UPDATE SETTING_VALUE
   SET Enabled = 0
 WHERE DisplayValue LIKE '%Miami%'
       AND EXISTS (
                   SELECT *
                     FROM SETTING s 
                    WHERE SETTING_VALUE.SettingID = s.SettingID
                          AND EXISTS (
                                      SELECT *
                                        FROM LU_FIELD f 
                                       WHERE f.FieldID = s.FieldID
                                             AND f.ControlName LIKE '%City%'
                                     )
                  );