メインコンテンツへスキップ

UPDATE テーブル名 SET・・・FROM またテーブル名

コメント

21件のコメント

  • nkmt

    ところでここで自分の名前をクリックして、投稿を押すと
    過去の投稿一覧が表示されて、見直すにも便利ですね。

  • shinpei

    nkmtさま

    update
     A
    set
     商品CD=12
    from
     D_売上明細 A
    where
     商品CD=123

    というふうに書けますよ。

  • nkmt

    updateの直後はエイリアスを書けるのですね。ありがとうございます。
    (ただいま、他県でPC入れ替え中です。Liveメール → Outlook変換中。こけるので小分けして変換中。)

  • shinpei

    nkmtさま

    お忙しいところ返信いただきありがとうございます。
    質問に対する回答ではありませんでしたね。
    joinする必要がなければ、1つだけ書けばよいですが(下記のように)
    update
      D_売上明細
    set
      商品CD=12
    where
      商品CD=123

    テーブルを2つ以上参照する場合はできないです。

  • Pu

    こんにちはPuです。
    普通1つでしょう
    update テーブル名
    set 列名1 = xxxxx
    ,列名2 = nnnnn
    where 列名xx = 'hogehoge
    でわ~でわ~'

     

     

  • nkmt

    コメントありがとうございます。パソコン触れる時に試してみます。

  • nkmt

    shinpei様、Puさん 誠にありがとうございました。

    ▼JOINが不要な場合、UPDATEの後ろに更新テーブル名を記述し、FROM は無くて良い。
    update  D_売上明細
     set   商品CD=12
    where   商品CD=123 で良い

    ▼JOINが必要な場合、UPDATEの後ろは更新対象テーブルのエイリアス名でも良い。
    update  UM
     set   商品CD=12
    FROM  D_売上明細  UM
    LEFT JOIN   M_XXX   XX   ON  XX.xxxCD = UM.xxxCD
    where   UM.商品CD=123 
    で良さそうですね。理解しました。感謝です。

  • nkmt

    今日は以下のデータパッチを行いました。本物のテーブル名ではありません。
    UPDATE MD
     SET [棚番号大]= ISNULL(TB.棚番号大,0)
        ,[棚番号中]= ISNULL(TB.棚番号中,0)
        ,[棚番号小]= ISNULL(TB.棚番号小,0)
      FROM   DATA_iPad棚卸   MD
      LEFT JOIN MST棚番 TB ON TB.拠点コード=2 AND TB.商品CD = MD.商品CD
    ※このシステムでは棚番は3階層ですが少ない方でしょうね。
    棚番の入れ替え等効率よく出来るシステムが求められますね。
    今登録されている棚番全部消してください!と頼まれた事があります。
    悲しい...と担当者様言ってました。
    今だったら、何番~何番を+100しましょうか!と提案も可能かもしれません。

  • nkmt

    昨日の夜はSQLコンテストというのに参加してみました。
    いろんな方々の回答例が見られて勉強になりました。

    SQLiteでは LEFT JOIN 得意先マスタ USING(得意先CD)といった記述で結び付けが可能みたいですね。

    JOINの USING は初めて知りました。
    この場合、DB上の項目名にはテーブル名を表す言葉は付加しない方が便利そうだと思いました。

    でもSQL Serverではおそらく使えないので ON句でJOINしております。

  • nkmt

    厚かましく質問です。

    ▼普段使ってません。
    SELECT 伝票番号 , 営業担当者コード , 担当者名  FROM DATA売上伝票 , MST担当者
     WHERE 営業担当者コード=担当者コード AND 売上日>=20190101

    ▼以下のようなJOINをよく使います。
    SELECT 伝票番号 , 営業担当者コード , 担当者名  FROM DATA売上伝票
      LEFT JOIN MST担当者 ON 担当者コード = 営業担当者コード
     WHERE 売上日>=20190101

    推定実行プランの表示とやりますと表示される関連図やコスト%も同じ値でした。
    つまりどっちでも速度は一緒という事でしょうか?

  • KURITA

    内部結合と左外部結合の差があるので結果が異なるかと思いますが・・・

    内部結合はWHERE句で合致したレコードのみが抽出される。

    左外部結合は左のテーブルの全件が抽出される。

    右テーブルの内容は合致したレコードのみ設定される。

    今回の例ですと、MST担当者に存在しないレコードが抽出されるされないの差が出ます。

  • nkmt

    whereの方は内部結合インナージョインと同等なんですね。失礼しました。レスありがとうございました。

  • tanda

    参考までですが、MagicですとInner Joinが「I=結合リンク」で、Outer Joinが「O=外部リンク」になります。

  • nkmt

    tandaさん、ありがとうございます。
    その点は承知しております。
    伝票入力画面でコードを入力したらマスタ名称を取得するシーンでは照会リンクを使う事が多いです。

    結合リンクはあまり使いませんが絞りこみなどで使う場面では外部リンクを使ってます。

    今初めて気付きましたがリンクの選択記号はインナーのiと
    アウターのoなんですね。

    dはDefineですかね?

    Magic開発版の日本語版を英語モードで動かす事って出来ましたかね?

    昔は海外のβ版Magicを入手してインストールする事もありましたが、最近はそれもできないですね。

    xpa5っていつか出るのでしょうね。

  • tanda

    「O=外部リンク」は、SQLが持つオリジナルの機能をMagicが裏でコールしているだけです。表向きの動きとしては、「L=照会リンク」と同じになります。「L=照会リンク」はISAM互換として残っているようなものですね。

  • tanda

    とはいえ、やはりまだまだPervasiveのユーザさんは多いと思いますので、主流は「L=照会リンク」ですね。

  • nkmt

    外部リンクと照会リンクはselectの発行回数は違うという事でよろしいでしょうか?

    ところで画面で変数入力した値でマスタ名称などを表示する部分は照会リンクしか使ったことがありませんが外部リンクを定義したらエラーになりますかね?
    後で面白半分で試してみます。

  • nkmt

    メインソースに対して沢山のマスタからマスタ名称を参照するマスタを
    照会リンクにするのと外部リンクにするのではSELECTの発行回数は違ってきますよね。

  • tanda

    変数はMagicが管理している値でして、リンクに使用される項目はSQLが管理している値ですので、おかしなことをすると、おかしな動きになりそうな気がしますね。

  • tanda

    Magicが裏でどのようなSQLコマンドを送っているかは、MagicでSQLのログを取ってみると分かりますよ。

  • tanda

    そういえば思い出しましたが、「照会リンク」を使用した場合は「結合リンク」や「外部リンク」と違って、データをMagicのローカルキャッシュ上に落としてからリンク処理を行いますので、送信されるSQL文も複数に渡る場合もあったような記憶があります。これはPervasiveとの互換処理ですから、当然のことになりますが。

サインインしてコメントを残してください。