在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%'
)
);