更新クエリでレコードを上書きする方法について

このQ&Aのポイント
  • 更新クエリのREPLACE文を使用して、既存のレコードを新しいデータで置換えたいと考えています。しかし、条件を追加する必要があり、ヘルプを見てもよくわからないため、具体的な方法を教えていただきたいです。
  • 具体的には、table1のIDとtable2のIDが一致し、かつtable2の性別が「不明」の場合に、table1の年齢をNULLに置き換えたいと思っています。お力を貸していただけないでしょうか。
  • テーブル1とテーブル2があり、テーブル1のIDとテーブル2のIDが一致し、かつテーブル2の性別が「不明」の場合に、テーブル1の年齢をNULLに置き換えたいと考えています。更新クエリのREPLACE文を使用して、この条件を満たすデータの上書きを行いたいです。具体的な方法を教えていただけないでしょうか。
回答を見る
  • ベストアンサー

更新クエリ、複数条件で置換え

既存のレコードを新しいデータで上書き(置換え)したいです。 ただ、上書きする際に、いくつか加えたい条件があるのですが、 更新クエリのREPLACE文のヘルプを見てもよくわからなかった為 教えていただけないでしょうか。 ●やりたいこと ※テーブル table1(ID,顧客名,年齢,性別(男,女,不明)) table2(ID,顧客名) ※条件 table1.ID = table2.ID And table1.性別 = "不明" table1の"ID"のうち、table2に同じ"ID"があり、 さらにtable2の"性別"が「不明」の場合には、 table1の"年齢"をNULLに置き換える。 どうかお力を貸してください。 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

更新クエリを使用することになりますが、 UPDATE table1 INNER JOIN table2 ON table1.ID = table2.ID SET table1.年齢 = Null WHERE table1.性別='不明' かも???です。 ※バックアップを必ず取ってからお試しを※

関連するQ&A

  • ある条件を含まないというクエリがうまく書けません。

    ある条件を含まないというクエリがうまく書けません。 test_table ID,name ----------- 1,aaa 2,bbb 3,ccc 4,ddd 5,eee test_table2 ID,value ----------- 1,100 1,200 1,300 1,400 2,100 2,200 3,900 3,800 4,400 4,500 4,600 5,100 今まで下記クエリのように、test_tableのIDとtest_table2のIDでジョインして、 test_table2のvalueに"200"を含んでいるtest_tableのレコードを取得していました。 SELECT DISTINCT test_table.* LEFT JOIN test_table2 ON test_table.ID = test_table2.ID WHERE test_table2.value = 200; (test_tableのID:1と2のレコードが返ってきます。) これを、test_table2のvalueに"200"を含まないものを返すようにしたいのです。 (test_tableのID:3と4と5のレコードを返したい) 下記クエリを作ってみましたが、ID:1と2も返ってきてしまいます。 ID:1のvalueの"100","300","400"、ID:2のvalueの"100"に条件が合ってしまうようです。。 SELECT DISTINCT test_table.* LEFT JOIN test_table2 ON test_table.ID = test_table2.ID WHERE test_table2.value != 200; なにが良い方法があればご教授下さい。

    • ベストアンサー
    • MySQL
  • Access 複数の抽出条件

    Access2002 windows2000 (例)次のようなテーブルとします。 フィールド名:名前 年齢 性別 レコード1 :山本 30 男 レコード2 :鈴木 40 女 レコード3 :田中 45 男 レコード4 :森本 26 女 クエリを利用して抽出する時、年齢が40以上で男を条件とすれば (1)年齢フィールドの抽出条件:>=40 (2)性別フィールドの抽出条件:男 として、田中が抽出されます。 では年齢が40以上で男、そして女は全て抽出したい時は(1)(2)の条件はどの様にすればいいでしょう? 抽出結果が 田中、鈴木、森本となりたいのです。 複数のクエリを作れば出来ますが、1つのクエリでは無理なのでしょうか。

  • Access クエリ このレコードセットは・・・

    いつもお世話になります。 Accessで下記の様にクエリを作成しましたが、”このレコードセットは更新できません”と出てしまいます。 ■テーブル1  ・顧客ID(主キー)  ・顧客名  ・住所  ・TEL ■テーブル2  ・顧客ID  ・取引ID(主キー)  ・請求金額 ■クエリ1(集計クエリ)  ・顧客ID グループ  ・請求金額合計: Sum(請求金額) 合計 ■クエリ2(実際に使用するクエリ)  ・顧客ID(テーブル1)  ・顧客名(テーブル1)  ・住所(テーブル1)  ・TEL(テーブル1)  ・請求金額合計(クエリ1) このクエリ2を開いて更新しようとしても、”このレコードセットは更新できません”と左下に表示されて更新できません。 ・請求金額合計(クエリ1)を除けば問題なく更新できます。 ですが1顧客に対して通算で幾ら請求をしたかとその顧客のデータを同一クエリで表示・更新したいので、意味をなさなくなってしまいます。 どなかた良い方法をご教授下さいませ。

  • ACCESSで複数テーブルのクエリ抽出

    ACCESSで複数テーブルのクエリ抽出 初めて投稿させてもらいます。 テーブル1・・・社員ID(主キー)、氏名 テーブル2・・・社員ID(重複キー有)、顧客ID テーブル3・・・社員ID(重複キー有)、得意先ID テーブル4・・・顧客ID、顧客氏名 テーブル5・・・得意先ID、得意先 上記のテーブル内容を1つのクエリで全部抽出するとき、 テーブル1の社員ID[a]とテーブル2の社員ID[a] と テーブル1の社員ID[a]とテーブル3の社員ID[a] を分けて抽出する方法ってありますか? クエリの結合プロパティで テーブル2の全レコードとテーブル1の同じ結合フィールドと テーブル3の全レコードとテーブル1の同じ結合フィールドにすると 「あいまいな外部接続が含まれているのでSQLを実行出来ません」とエラーになり、 テーブル1の全レコードとテーブル2の同じ結合フィールドと テーブル1の全レコードとテーブル3の同じ結合フィールドにすると 社員ID[a]、顧客ID[1]、得意先ID[α]、顧客氏名[吉田]、得意先[○○商事] 社員ID[a]、顧客ID[1]、得意先ID[β]、顧客氏名[吉田]、得意先[△△金融] みたいになってしまうのです。 やりたい結果は 社員ID[a]、顧客ID[1]、得意先ID["空欄"]、顧客氏名[吉田]、得意先["空欄"] 社員ID[a]、顧客ID["空欄"]、得意先ID[β]、顧客氏名["空欄"]、得意先[△△金融] 説明下手ですいませんが、ご教授の程よろしくお願いします。

  • 更新クエリでの抽出条件の設定がわかりません

    お世話になります。 Access2010を使っています。 今、TBL_1の社員コードの中で、期間2の日付を、TBL_2の日付フィールドの 値に置換したいです。 TBL_1はIDをオートナンバーで振っており、置換したいレコードは社員コードID値が最大の レコード内の期間2フィールドになります。TBL_2は全社員コードはなく、社員 コードがある場合のみTBL_1の期間2を置換します。 テーブル1名:TBL_1 ID 社員コード 期間1   期間2   1  00123   2012/6/30  2014/3/31 2  00123   2014/4/1   2015/3/31 3  00456   1995/9/15  2008/3/31 4  00789   2001/6/2  2013/3/31  ・ 10 00456   2008/4/1  2016/3/31  ・ 30 00789   2013/4/1  2015/3/31  ・ 50 00123   2015/4/1  2017/3/31  ・ テーブル2名:TBL_2 社員コード 日付      00123   2016/10/31  00456   2015/5/20 上の例では結果として、 IDが10のレコードの期間2を2015/5/20に置換します。 IDが50のレコードの期間2を2016/10/31に置換します。 テーブル1名:TBL_1 ID 社員コード 期間1   期間2   1  00123   2012/6/30  2014/3/31 ←変わらない 2  00123   2014/4/1   2015/3/31 ←変わらない 3  00456   1995/9/15  2008/3/31 ←変わらない 4  00789   2001/6/2  2013/3/31 ←変わらない  ・ 10 00456   2008/4/1  2015/5/20 ←期間2:2015/5/20に  ・ 30 00789   2013/4/1  2015/3/31 ←変わらない  ・ 50 00123   2015/4/1  2016/10/31 ←期間2:2016/10/31に 更新クエリを使えばいいと思っていますが、抽出条件をどのように 書いていいのかわかりません。 恐れ入りますが、宜しくお願い申し上げます。

  • クエリの条件にての"*"の使い方

    いつもお世話になっております。 Access2000にてクエリの抽出条件で悩んでいます。フォームにて入力があったときはそれで抽出・入力が無かった時は全て抽出したいと思い Like forms![フォーム名]![コントロール名]&"*" をクエリの抽出条件にセットしました。入力があったときはOKなのですが、入力が無かった時はテーブルにデータがあるレコードのみを抽出してしまいます。データが入ってないレコードも抽出したいのですがどのように記述すればいいのでしょうか? 宜しくお願い致します。

  • 複数行のクエリを、まとめて実行するには?mysqli_multi_query()?

    PHPとMySQLの環境です。 複数行のクエリを、まとめて送って取得したいと考えています。 ですが、今試行錯誤しているのですが、うまく行かない状態で、クエリをきちんと実行できません。 処理の流れとしては、 [DBにアクセス]→[2つのクエリの実行]→[データ取得]→[DBをクローズ] でいいのではないかと思ってやっているのですが、 2つのクエリを実行するのはなにやら無理なような記述もウェブ上で拝見しました。 その場合、同じDBの同じテーブル内の異なるデータを取得したいだけなのに、 わざわざ、一度DBにコネクトして、切断、そしてまたコネクトして、切断ということを繰り返さないとダメなのでしょうか。。? そもそも同一PHPファイル内で二度も接続、切断はすべきではないですか? ちなみに、 一つ目のクエリでは、テーブル(table_a)のレコード数をカウントしてPHP側で取得するという流れの処理です。 $query = "SELECT count(*) FROM `table_a`"; もう一つのクエリは、テーブル(table_a)の最新のレコードの、idカラムのidを取得するだけのものです。 $query = "SELECT arrayset FROM `table_a` ORDER BY id DESC LIMIT 1"; この処理を一度のクエリで入れ込むことは可能でしょうか。 それぞれ単独では実行できます。 PHPでこのような関数 mysqli_multi_query() を見つけて色々調べているのですが、 いまだに使用方法がきちんとつかめない状況です。 これで複数のクエリを送ることは可能でしょうか。 アドバイス宜しくお願いします。

    • ベストアンサー
    • MySQL
  • 更新不可能のクエリの条件を教えてください。

    他の人が作ったアクセスのファイルなのですが クエリを開いてデータを編集しようとすると 音が鳴り、左下のステータスバー(?)に 「このレコードセットは更新できません」 となってしまいます。 そのクエリをデザインビューで見ると 二つのテーブルが矢印で繋がっており、 月: Month(T【家計簿】明細!取引日) のような式で作られたフォールドが10個くらいあります。 二つのテーブルそれぞれに主キーはありますが 主キー同士は繋がっていません。 他の人が作った時は2003で作り 私は2007で開いています。 どこをどういじれば、更新可能なクエリになるのか分からないので 更新不可能のクエリの条件を教えてください。 変にいじって戻せなくなりたくないので^^; アドバイスよろしくお願いします。

  • クエリーの抽出条件、テーブルの構成について

    LIbreoffic Base を使用しています。 クエリーでの抽出仕方を教えてください。 <例> 複数の顧客がいます。 顧客Aが1つの店舗で商品を購入した場合に合計金額に対して割引はありません。 顧客Aが2つの異なる店舗で同一日に商品を購入した場合に各店舗毎の合計金額を合算して10%の割引を行います。 顧客Aが3つの異なる店舗(以上)で同一日に商品を購入した場合に各店舗毎の合計金額を合算して20%の割引を行います。 テーブルからクエリーで抽出して 結果として顧客ごとに日別、月別、年別に 顧客 日付 金額の明細と金額の合計 割引額の明細を作成したい。 テーブルの構成 顧客テーブル  顧客ID 顧客名 商品デーブル  商品ID 商品名 商品単価 店舗テーブル  店舗ID 店舗名 明細テーブル  明細ID 顧客名 店舗名 商品名 日付 金額 各テーブルのプライマリーキーは顧客名、商品名 店舗名 明細IDです。 質問ですが 顧客名 日付 店舗名、金額の明細と金額の合計 割引額を日別、月別、年別に抽出し計算するしかたを教えてください。 特に各顧客か同一日に購入した店舗数によって割引率が異なるので、これをクエリーの抽出条件としてどう表現し明細にしたらよいかで行き詰っています。 テーブルの構成にはこだわっていません。変更すべき箇所があれば指摘してください。 よろしくお願いいたします。  

  • 3テーブル外部結合&やっかいな条件

    ORACLE10gを使用しています。 下記のようなTABLE1,2,3があります。 TABLE1の全てを抽出し、TABLE2に該当レコードがあれば、TABLE2のBUMON_CDを使ってTABLE3のNMを取得したいです。 TABLE1とTABLE2の結合条件は TABLE1.CD = TABLE2.CD AND TABLE2.DATE >= TABLE1.DATE TABLE2に該当レコードが複数ある場合はTABLE1.DATEに最も近いレコード(TABLE2)を抽出したいのです。 サブクエリと外部結合を使用するのは想像できるのですが、TABLE1,TABLE2ともに同一CDのレコードが複数存在する中からTABLE1とTABLE2のレコードをどのようにぶつければいのか分からなくなってしまいました。アドバイスお願いします。 【TABLE1】 DATE   |CD -------------- 2006/08/15|01 2006/08/20|01 2006/08/03|02 【TABLE2】 CD|DATE   |BUMON_CD ---------------------- 01|2006/08/17|0102 01|2006/08/18|0101 【TABLE3】 ID|KBN_CD|NM ----------------------- 1 |0101 |サービス部門 1 |0102 |営業部門 【求める結果】 CD|BUMON_CD|NM ----------------------- 01|NULL  |NULL 01|0101  |サービス部門 02|NULL  |NULL

専門家に質問してみよう