none
UPDATE文で同一テーブルをINNER JOIN RRS feed

  • 質問

  • Windows Server 2003(R2 with SP2)
    SQL Server 2005 Standard Edition SP2

    以下のような構成のTestテーブルがあります。

    列名                データ型            NOT NULL
    --------------------------------------------------
    [EmployeeId]  [nchar](4)         NOT NULL
    [SeqNo]          [int]                  NOT NULL
    [Name]           [nvarchar](50)  NULL

    主キーは、[EmployeeId]と[SeqNo]です。


    データのイメージは以下です。
    [EmployeeId][SeqNo][Name]
    --------------------------------------
    1000 0 田中 太郎
    1000 1 NULL
    1000 2 NULL
    2000 0 佐藤 次郎
    2000 1 NULL
    3000 0 鈴木 三郎
    3000 1 NULL
    3000 2 NULL
    --------------------------------------

    やりたいことは、
    [EmployeeId]が一致するレコードに
    [SeqNo]=0の[Name]を設定するUPDATEです。

    以下のようなUpdate文を作成し
    実行したところ、ほとんどの場合は成功していたのですが
    稀に正常に更新されない場合があります。

    --------------------------------------
    UPDATE Test
     SET Test.Name = TestDummy.Name
     FROM Test
     INNER JOIN Test AS TestDummy
     ON Test.EmployeeId = TestDummy.EmployeeId
     AND TestDummy.SeqNo = 0
    --------------------------------------

    このような同一テーブルをINNER JOIN するような
    UPDATEは行うべきではないですか?

    ほとんどの場合が、正常に更新できているだけに
    正常に更新できない理由がわからず、
    腑に落ちない状況です。

    アドバイスのほうをよろしくお願いします。

    2009年7月24日 2:40

回答

  • Test.SeqNo=0の時まで更新し直してますね。

    UPDATE Test
     SET Test.Name = TestDummy.Name
     FROM Test
     INNER JOIN Test AS TestDummy
     ON Test.EmployeeId = TestDummy.EmployeeId
     AND TestDummy.SeqNo = 0
     AND Test.SeqNo <> 0

    で改善されますか?
    • 回答としてマーク sk7474 2009年8月4日 9:09
    2009年7月24日 11:16

すべての返信

  • Test.SeqNo=0の時まで更新し直してますね。

    UPDATE Test
     SET Test.Name = TestDummy.Name
     FROM Test
     INNER JOIN Test AS TestDummy
     ON Test.EmployeeId = TestDummy.EmployeeId
     AND TestDummy.SeqNo = 0
     AND Test.SeqNo <> 0

    で改善されますか?
    • 回答としてマーク sk7474 2009年8月4日 9:09
    2009年7月24日 11:16
  • こんにちは。中川俊輔です。

    佐祐理さん、いつも回答ありがとうございます。
    まめぞう1118さん、フォーラムのご利用ありがとうございます。

    その後いかがでしょうか?問題は解決しましたか?
    有用な情報と思われたため、佐祐理さんの回答へ回答マークをつけさせていただきました。

    今後ともフォーラムをよろしくお願いします。
    それでは!
    マイクロソフト株式会社 フォーラム オペレータ 中川 俊輔
    2009年8月4日 9:11