从子查询SQL Server 2008更新

时间:2012-06-13 14:18:00

标签: sql tsql

我有tblPatient表中的县名和州名。我有一个县名和州名的查找表,我正在尝试规范我的tblPatient,它的结构是 enter image description here

可以想象,不同的州有时会分享县名。为了解决这个问题,我正在使用查询

select patientid, admissionDate, dischargeDate, patientState, patientCounty
from tblPatient
where patientState='AL'

我想将tblPatient.patientCounty更新为等于tblStateCounties.countyCode,其中patientCounty和countyName相同。

我还没有如何使用rollback的虚拟版本,但这看起来对我来说是正确的,但我不想承认可能是愚蠢的错误。

update tblPatient
set tblPatient.patientCounty=tblStateCountes.countyCode
from 
(
select patientID, admissionDate, dischargeDate, patientState, patientCounty from tblPatient
where patientState='AL'
) as t
inner join on tblStateCounties.countyName=tblPatient.countyName

1 个答案:

答案 0 :(得分:3)

你写的查询不会解析(你可以很容易地检查),因为你在子查询中缺少FROM子句。你还需要加入t.tblPatient而且你也需要需要在主要的FROM子句中使用tblPatient。

您可以使用以下查询更新表格。

UPDATE tblPatient 
SET    tblPatient.patientCounty = tblStateCounties.countyCode 
FROM   tblPatient 
       INNER JOIN tblStateCounties 
               ON tblStateCounties.countyName = tblPatient.patientCounty 
WHERE  patientState = 'AL' 
       AND tblStateCounties.stateCode = '01'; 

你会注意到我删除了子查询并使用了一个简单的where子句。由于您注意到县可以共享名称,因此您还需要过滤tblStateCounties.stateCode

还要考虑将StateNames的表映射到StateCode(如果你还没有那个)

DEMO