SQL2005のクエリ文でテーブルAとテーブルBのポイントを差し替える方法について

このQ&Aのポイント
  • SQL2005のクエリ文でテーブルAの「来店ポイント」とテーブルBの「来店ポイント」とを差し替える方法について教えてください。
  • 中堅外食チェーンの板前がサーバ管理者までしていて、テーブルAとテーブルBの「来店ポイント」の差し替えについて質問します。
  • テーブルAとテーブルBの「会員No」と「来店ポイント」があり、テーブルAの「来店ポイント」をテーブルBの「来店ポイント」と差し替えるSQL2005のクエリ文を教えてください。
回答を見る
  • ベストアンサー

SQL2005 のクエリ文について

いつもありがとう御座います(ご回答いただいた皆様)。 ちょっと悩んでおりますので何かヒントを頂けたら・・・よろしくお願いします。 テーブルAに「会員No」と「来店ポイント」、という列があったとします。 テーブルBにも「会員No」と「来店ポイント」があったとします。 AB両方の会員Noは=です。 テーブルAの「来店ポイント」が間違っているので、テーブルBの「来店ポイント」と 差し替えたいのですが、どの様なクエリになるのでしょうか? 自力で何とかなるかな、、と思い2時間ほど粘りましたが、上手くいかないので・・・ (中堅外食チェーンの板前をしてますが、何故かサーバ管理者までしてます。 若いというだけで・・・そんな環境なので聞ける人も居らず、いつもここが頼りになってます。 すみません) 何卒、よろしくお願いします。

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

  • ベストアンサー
回答No.3

追記 前の回答で「標準的なクエリ」というのは取り消します。 (簡単だと思ったら、DBMSごとにだいぶ異なるようです) SQL Server 2005 では下のように、結合が使用できるようです。 (試してはいませんが・・・) -- テーブルを結合して更新する update a set a.visit_point = b.visit_point from a_table a, b_table b where a.member_no = b.member_no -- 相関サブクエリを使った例 update a_table a set visit_point = (select b.visit_point from b_table b where a.member_no = b.member_no) where exists (select null from b_table b where a.member_no = b.member_no) -- 更新する値が複数ある場合は set (col1, col2) = (select table1.col1, table2.col2 from table1 ...) のようにする。

zenigata711
質問者

お礼

ありがとうございました! 感謝、感謝、です。

その他の回答 (2)

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.2

どんなSQLを作ったのでしょう? ---- update テーブルA set 来店ポイント = b.来店ポイント From テーブルA a inner join テーブルB b on a.会員No = b.会員No Where a.来店ポイント <> b.来店ポイント

zenigata711
質問者

お礼

こちらのクエリの方が簡単だった模様です。 今後の参考にします。ありがとうございます。

回答No.1

SQL Server 2005 環境では試していませんが、私の手元の Access 2007 では下の様なクエリで更新できますよ。標準的なクエリですので SQL Server 2005 でも問題ないと思います。 update a_table a, b_table b set a.visit_point = b.visit_point where a.member_no = b.member_no table_a member_no visit_point 100000 10 100001 20 100002 30 table_b member_no visit_point 100000 100 100002 300 update 後 table_a member_no visit_point 100000 100 100001 20 100002 300 # zenigata711 様のご苦労をお察しします。

関連するQ&A

  • SQL2008 クエリ文について

    いつも皆様に助けていただいてます。 過去に色々聞いているものの、なかなか応用が利かず・・・今回もご支援下さい。 SQL2008に、1つのDBを作っていて、その中にテーブルAとテーブルBがあります。 テーブルAには、1つの会員Noにつき3つのSEQ1~3の行があって、それぞれにポイント数が入ってます。 テーブルA 会員No  SEQ   Point 1001     1     20 1001     2     30 1001     3     50 1002     1     15 1002     2     10 1002     3      0  テーブルBには、1つの会員につき最大10個のSEQが付きますが、今は殆どカラッポです。 テーブルB 会員No  SEQ  Rank 1001    1    5 1002    1    5 やりたいことは、テーブルAのSEQ1のポイント数が99以外なら、テーブルBに テーブルAの「会員NO」、SEQ「7」、Rank「1」 の行を挿入したいです。 クエリ実行後のテーブルB 会員No  SEQ  Rank 1001    1    5 1001    7    1 1002    1    5 1002    7    1 テーブルAのSEQ1のPointが99以外なら、テーブルBに「会員No」とSEQ「7」 とRank「1」を挿入、という概要です。 クエリで可能でしょうか? 先ずは自力である程度やってみるのが筋なんでしょうが、時間が無いので聞いてしまいます。 何卒よろしくお願いします。

  • SQL2008 クエリ文について

    いつも助けてもらってます。 皆様ありがとうございます。 以下の内容で1つのテーブルを更新するクエリを作りたいのですが、どうしたら良いでしょうか? 本見て自力で考えれば良いんでしょうが、、、、よろしくお願いします。 1つのテーブル、「A」があるとしまして、その中には会員Noや、SEQ、Point、Point2といった 列があります。 1つの会員Noに、3つの行、SEQ1~3が必ずあります。 更新したい行はSEQ1だけです。 Pointは整数で、Point2は小数点第一位までの表記です。 テーブルA 会員No  SEQ   Point   Point2 1001     1     20    99.0 1001     2     30    99.0 1001     3     50    15.5 1002     1     99    10.2 1002     2     99    21.6 1002     3     99     10.0 やりたい事は、 SEQ1の中で、 Pointが99以外でPoint2が99.0なら、Point2へPointの数値を移したい。 Pointが99でPoint2が99.0以外なら、PointへPoint2の四捨五入した数値を移したい。 要するに、SEQ1のPoint,Point2、片方だけ99、という現状がマズイので直したい。 という内容です。 会員No  SEQ   Point   Point2 1001     1     20    20.0 ←更新 1001     2     30    99.0 1001     3     50    15.5 1002     1     10    10.2  ←更新 1002     2     99    21.6 1002     3     99     10.0 上記の様になれば、、と思います。 何卒ご指南くださいませ。

  • SQL2008 クエリ文について

    いつもお世話になっております。 一応30分ほど自力で考えましたが、断念しました。 どなたかご教授下さい。 テーブルAの中に、以下の様なデータがあるわけですが、 KAINo SEQ  0001    1 0001    2 0001    3 0001    5 0002 1 0002 5 1つのKAINoに対して、存在するSEQがバラバラなので、全てのKAINoにSEQ1~7を 作るクエリを流したいのです。 (↑をこんな感じに↓) KAINo SEQ  0001 1 0001 2 0001 3 0001 4 0001 5 0001 6 0001 7 0002 1 (略)  0002 7 どの様なクエリになるのでしょうか? そもそもクエリで可能なのでしょうか? どうぞ、よろしくお願い申し上げます。

  • ACCESS2003クエリの結合した表示形式が

    ACCESS2003でクエリを作成しました。各テーブルのフィールドを結合したのですが 表示形式が思ったようになりませんでした。 【Aテーブル】 フィールド:学部NO データ型:数値型 書式:00 【Bテーブル】 フィールド:学科NO データ型:数値型 書式:00 【ABクエリ】 フィールド:学籍NO:[Aテーブル]![学部NO]&[Bテーブル]![学科NO] 【ABクエリ】の結果が数字が4桁表示されません。 (例) 0101 と表示してほしいのですが、   11  と表示されます。 各テーブルでは、01と表示されるのですが・・・。 宜しくお願いします。

  • SQLのUPDATE文について

    SQL勉強中です。下記の様なデータを書き換えたいのですが、どの様なSQL文になるのでしょうか? ご教授下さいませ。 1つのテーブルに「会員NO」と「会員種別」という列がありまして、 会員氏名   会員No   会員種別 ・・・ --------------------------------- 田中一郎 1-0001 0001    ・・・ 鈴木二郎 2-0003 0001    ・・・ 会員Noの左端の数値が1なら会員種別を0001、2なら0002といった 形に振り分けたいのですが、どの様なSQL文になるのでしょうか? 自力ではなんとも上手くいきませんでした。 どうか、お助け下さいませ。

  • 【Access2007】クエリを教えてください

    Access2007を使用しています。 以下のような3つのテーブルがあります。 テーブルA No    項目a 1     ○ 2     ○ 3     ○ 5     ○ テーブルB No    項目b 1     ○ 4     ○ 5     ○ テーブルC No    項目c 1     ○ 2     ○ 4     ○ 6     ○ これらの3つのテーブルから以下の結果を返すクエリはどうすればいいのでしょうか? No    項目A   項目B   項目C 1     ○     ○     ○ 2     ○            ○ 3     ○ 4            ○     ○ 5     ○     ○ 6                  ○

  • ACCESSクエリでの結合の仕方・・・SQL文かも

    ACCESS 2003を使用しています。 テーブルA テーブルB の2テーブルでクエリを作っています。 結合的には・・・ テーブルAのフィールドX ⇔ テーブルBのフィールドY です。 これで2テーブルに共通する一致データのみ抽出はできるのですが、 2テーブルに共通する一致データに加えて、 2テーブルの不一致データも一緒にクエリ表示されるようにしたいのです。 欲しいのは抽出イメージは、以下のような感じのクエリ結果です。 テーブルA:フィールドX|テーブルBのフィールドY a             |(空) (空)           |b c             |c d             |(空) (空)           |e f              |f  g             |(空) h             |h おそらく、SQL文を書く必要があるとは、想像できるのですが・・・ どなたか、ご教授いただけると助かります。 よろしくお願いします。

  • SQLについて教えてください

    お世話になっております。 以下、取得したい内容です。 この内容に対して、どのようにSQLを書けばよいか良いか教えて頂きたいです。 (1)DBの全テーブルに対して特定のカラムを取得したい。(カラム名はA,Bとする) (2)取得したカラム.Aに格納されている各値に対して、カラム.Bの各レコードの項目には何の値が格納されているか知りたい。 DBはオラクルですが、オラクルでしか使えないSQL構文はつかないようにしたいです。 自分で考えたSQLは、 SELECT A,B FROM * GROUP BY A,B ですが、そもそも全テーブルを指定する際に使用するのが、「*」では正しくないような気もします。 説明がつたなくて申し訳ございません。 宜しくお願い致します。 ・テーブルイメージ テーブル.test1 +--------+------+ | No | A | B | +--------+------+ | 01 |AA| 1 | | 02 |AA| 1 | | 03 |AB| 2 | | 04 |AB| 2 | | 05 |AC| 3 | | 06 |AC| 3 | | 07 |AC| 3 | +--------+------+ テーブル.test2 +--------+------+ | No | A | B | +--------+------+ | 01 |AA| 1 | | 02 |AA| 1 | | 03 |AB| 2 | | 04 |AB| 2 | | 05 |AC| 1 | | 06 |AC| 3 | | 07 |AC| 3 | +--------+------+ テーブル.test3 +--------+------+ | No | A | B | +--------+------+ | 01 |AA| 3 | | 02 |AA| 1 | | 03 |AC| 2 | | 04 |AC| 3 | +--------+------+

  • SQL2008のUPDATE分について

    いつもお助け頂いております。 簡単な方には簡単な内容なのでしょうが、行き詰まりました。 お助け下さい。 現在、「テーブルA」の中に、「会員NO」という列があります。 現在は、「00001001」といった8桁の数値と、「000000001010」といった12桁の数値 が混在しております。 これを12桁に統一したいのですが、なかなか検索してもHITせず・・・ ほとんどが8桁なので、先頭に「0000」を追加して12桁の分は手作業で修正すればいいか、 と思い社内のSQL2005でテストOKだったクエリが、現地のSQL2008ではエラーに。。 ちなみに下記の内容です。 UPDATE テーブルA SET 会員NO = '0000' + 会員NO できれば12桁に統一、というクエリが欲しいのですが・・よろしくお願いします。

  • GROUP化した時の最適なSQL文の書き方

    いつも勉強させて頂いています。 GROUP化した時に応答時間がかかるので、 短縮したいのですが、方法をご教示願います。 SQLSERVER2005 EXPRESS VB2008 テーブルA(注文NO、手配日付、品名、手配数) テーブルB(入荷NO、注文NO、入荷数、単価) テーブルAの注文NOに対して複数の入荷があります。 テーブルAの注文NOに対して未入荷の場合も「0」で出力します。 出力(注文NO、品名、入荷累計、平均単価、合計金額) SQL文を書く時に、注文NOでGROUP化してから抽出(手配日付)すると レコード件数が多いため、応答時間がかかってしまいます。 どのような書き方がよろしいでしょうか? この書き方では、時間がかかります。 SELECT テーブルA.注文NO, テーブルA.手配日付, テーブルA.品名, テーブルB2.入荷数, テーブルB2.単価 FROM テーブルA LEFT OUTER JOIN (SELECT 注文No, SUM(入荷数) AS 入荷数, AVG(単価) AS 単価 FROM テーブルB GROUP BY 注文No) AS テーブルB2 ON テーブルA.注文NO = テーブルB2.注文No WHERE (テーブルA.手配日付 = '2008/01/01') すべてのレコードをグループ化してから処理しているため、遅いと思います。 よろしくお願いいたします。