1

表に郡名と州名を含む tblPatient があります。郡名と州名の両方のルックアップ テーブルがあり、tblPatient を正規化しようとしています。その構造は次のとおりです。 ここに画像の説明を入力

ご想像のとおり、異なる州が郡名を共有することがあります。これに対処するために、クエリを使用しています

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

PatientCounty と countyName が同じになるように更新tblPatient.patientCountyしたいと思います。tblStateCounties.countyCode

私はダミーの使用方法を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
4

1 に答える 1

3

サブクエリにFROM句がないため、作成したクエリは解析されません(簡単に確認できます)。また、JOINする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 へのテーブル マッピングを作成することも検討してください (まだ持っていない場合)。

デモ

于 2012-06-13T14:35:24.393 に答える