2

以下に、私の簡略化されたDBモデルを示します。

ここに画像の説明を入力してください

エラーのため、エントリが特定のプランに属するJob.location列にはnull値のみがあります。したがって、このプランに関連付けられているすべてのジョブを更新し、Job.locationをこのプランを所有するユーザーのLocation.nameに設定します。

私はこのSQLクエリを試しました:

    update dbo.Job set location =

        (select name from dbo.Location as loc where

           loc.objectid = objectid  and loc.user_id in 

           (select userid from dbo.[Plan] as p where p.planid = 20))

        where planid = 20

ただし、結果は常に次のようになります。影響を受ける行は0行です。サブクエリ自体は正しく機能します。

特定のplanidを持つすべてのジョブが影響を受けることをどのように達成できますか?

4

2 に答える 2

6

objectidsubquery に columnのエイリアスがないことが間違いだと思うloc.objectid = objectidので、 subquery を単独で実行すると次のようloc.objectid = loc.objectidに動作し、更新で実行すると次のように動作しますloc.objectid = dbo.Job.objectid

スキーマでは、ユーザーに対して複数の場所を持つことができますが、ユーザーとオブジェクトごとに 1 つの場所しかないと仮定すると、次のクエリを試すことができます。

update dbo.Job set
    location = L.Name
from dbo.Job as J
    inner join dbo.[Plan] as P on P.planid = J.planid
    inner join dbo.Location as L on L.user_id = P.userid and L.objectid = J.objectid
于 2012-12-12T08:36:55.040 に答える
1
UPDATE
j
SET Job.location = loc.name
FROM
Job j
INNER JOIN Plan p ON j.planid = p.planid
INNER JOIN aspnet_Users u ON p.userid = u.UserId
INNER JOIN Location loc ON u.UserId = loc.user_id
WHERE j.planid = 20 
AND p.planid = 20
于 2012-12-12T08:40:35.113 に答える