0

結合からテーブルを更新する際に問題が発生しています。この種の更新を何度も行いましたが、現在は機能していません。元のクエリは次のとおりです。

select 
surveydatakey
,a.Strata as [surveydata strata]
,SurveyPeriod
,DateOfSurvey
,StationLocation 
,a.CardType
,a.timeperiod
,station_entrance
,Direction
,DayType
,EntranceType
,b.Strata as ActuaStrata 
,StartDate
,currentdate
from surveydata a
inner join MAP_Entrance_Population b
on a.station_entrance_id = b.station_entrance_id
and a.timeperiod = b.tp
and  a.strata <> b.strata
where mode = 'train'
and a.strata not in (1,14,15,21,22,23)
and dateofsurvey between startdate and  currentdate
order by a.strata

これが更新クエリです。

begin tran
update a
set a.strata = b.strata
from surveydata a
inner join MAP_Entrance_Population b
on a.station_entrance_id = b.station_entrance_id
and a.timeperiod = b.tp
and  a.strata <> b.strata
where mode = 'train'
and a.strata not in (1,14,15,21,22,23)
and dateofsurvey between startdate and currentdate

検索クエリは 218 の結果を生成し、更新は 218 の結果を変更すると述べています。私の検索クエリには、a.strata <> b.strata という条件があります。この2つを対等にするのが私の目標です。そのため、更新クエリの後、選択クエリで結果が得られないはずだと考えました。しかし、実際には何も変わりません。更新を行った後も、同じ 218 の結果が得られます。

何か案は?

4

3 に答える 3

0

結合条件に基づいて、テーブル B からテーブル A に結合されるレコードがないためでしょうか?

次のクエリを実行してみてください

select *
 from surveydata a
where mode = 'train'
and a.strata not in (1,14,15,21,22,23)
and dateofsurvey between startdate and currentdate 
and not exists
(
     SELECT 1
from MAP_Entrance_Population b
WHERE a.station_entrance_id = b.station_entrance_id
and a.timeperiod = b.tp
and  a.strata <> b.strata
 )
于 2013-10-01T06:13:02.953 に答える
0

次の 2 つのクエリを試してください

select 
.
.
.
from surveydata a
inner join MAP_Entrance_Population b
on a.station_entrance_id = b.station_entrance_id
and a.timeperiod = b.tp
where a.strata <> b.strata
and mode = 'train'
and a.strata not in (1,14,15,21,22,23)
and dateofsurvey between startdate and  currentdate
order by a.strata

アップデート

update a
set a.strata = b.strata
from surveydata a
inner join MAP_Entrance_Population b
on a.station_entrance_id = b.station_entrance_id
and a.timeperiod = b.tp
where a.strata <> b.strata
and mode = 'train'
and a.strata not in (1,14,15,21,22,23)
and dateofsurvey between startdate and currentdate
于 2013-10-01T06:23:21.007 に答える