Windows98Access2000です。
下記のようなテーブルを元にしたクエリがあります。
主索引(主キー)|手配番号 |行番号|更新回数|発行日 |販売先|・・・
0101023456  |0101023456|  56|   1|19990301|A001 |・・・
0101034567  |0101034567|  67|   3|20000503|A235 |・・・
   ・       ・     ・   ・   ・    ・
仮に既存データをA、更新データ(TXT)をBとします。
(更新データは毎朝TXTで決まったフォルダーに落ちてきます。)

同じ項目の更新データBを、下記の条件で最終的に既存データAに新規追加、
上書したいのです。

1.更新データBの主索引は主キーにはなっておらず番号がダブっています。
  ただレコードごとに「更新回数」項目に1や2といった番号が入ってますので
  、その中から同じ主索引番号がある場合更新回数の一番大きな番号だけを抽出
  したい。

2.1で抽出した更新データBを今度は、既存データA(主索引は主キー)に追加す
  るのですが、上記と同じくすでに重複する主索引番号が存在する場合A、Bデー
  タの「更新回数」項目を見て一番大きい番号を反映(上書)させたい。

2の既存データに追加だけは追加クエリを作り重複しないデータは追加することが
出来るのですが、重複しているデータは「XX件の重複データが・・・」とでて
追加することが出来ません。(あたりまえですかf^^;)
ちょっとわけのわからない説明になってしまいましたのでやりたいことを簡単に
いいますと、更新データから既存データへ主索引がダブることなく毎朝送られて
くる最新データをテーブルに取り込みたいということなのです。
ちょっと思ったのですが、もしかして私は抽出条件式が分かってないだけなので
しょうかf^^;
おかしな質問で申し訳ありませんが、ご指導の程よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

>クエリー結果をファイルに出力(1)


 先に結果ファイルを作成します
>グループ化をするとはどういう処理を言うのでしょうか?
 クエリー→新規作成→デザインビュー→OK
 テーブル→テーブルを選択→追加→閉じる
 主索引(主キー)と更新回数をダブルクリック
 Σキークリック
 更新回数の集計をクリックし最大を選択
 更新回数の並べ替えをクリックし昇順を選択
>クエリー結果をファイルに出力(2)
 一番上のクエリー→追加→結果ファイルを指定((1)で作成したもの)
です。がんばって下さい。
何かあれば補足して下さい。
但し次回は朝になります。ご了承下さい。
 
 
 
    • good
    • 0
この回答へのお礼

k_ebaさん親切に手順を踏んでの説明有難う御座います。
とても分かり易く感謝いたします。
万一、うまく出来ないときはまた質問させてください。
どうぞよろしくお願い致します。
有難う御座いました。

お礼日時:2001/10/22 18:30

更新データBは主索引+更新回数で重複しない値になります。

主索引ごとの更新回数の最大を取得して、どうのこうのやればいいわけです。

1.更新データBから一時テーブルの作成
select 主索引,max(更新回数) as 最終更新
into 一時テーブル
from 更新データB
group by 主索引

2.更新されているデータを予め削除する
delete 既存データA.*
from 既存データA inner join 一時テーブル
   on 既存データA.主索引 = 一時テーブル.主索引

3.既存データAへ追加データ、更新データをinsert
insert into 既存データA (主索引,更新回数.....)
select 更新データB.主索引,更新データB.更新回数...
from 更新データB inner join 一時テーブル
   on (更新データB.主索引 = 一時テーブル.主索引)
     and (更新データB.更新回数 = 一時テーブル.更新回数)

と言った感じですかね。
    • good
    • 0
この回答へのお礼

storkさん回答有難う御座います。
SQLは良く分からないのですが、このSQLは更新データBの方に記述してやると良かったでしょうか。
早速やってみたいと思います。
ありがとうございます。

お礼日時:2001/10/22 17:46

まず考え方ですが


1つのファイルをクエリー等で選択してどのこうのとやる場合
クエリーを続けると上手く動作をしないことが多々あります。
それの解決策ですが、クエリー結果をファイルに出力し
それを元に処理をする方法がゆうこうです。

さて1)の方法ですが
主キーと更新回数だけのクエリーで
主キーをグループ化し
更新回数を集計、最大、昇順でファイルを作成してから
実行された方が良いと思います。
がんばって下さい。
    • good
    • 0
この回答へのお礼

早速の回答有難う御座います。
>クエリーを続けると上手く動作をしないことが多々あります。
クエリはあまり重ねて使わないほうが良いということですね。

知識が乏しくて申し訳ありませんが、
>クエリー結果をファイルに出力しそれを元に処理をする方法
と、グループ化をするとはどういう処理を言うのでしょうか?
ご指導いただけたら幸いです。
よろしくお願い致します。
また、早速やってみます。

お礼日時:2001/10/22 17:15

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qフェッチでデータが上書きされます

こんにちは。perl + html + mysqlのコーディングで悩んでいるので質問させてください。
複数フィールド+複数件(例えば13フィールド+3件)のデータがテーブルに存在する時、SELECT文でそのデータを取得したいとします。
分からない所はフェッチの部分なのですが、

$i=0;
while($selectdata[$i]=$sth->fetchrow_arrayref(
$i++;
}

----[中略]-----

for($i=0;$i<$rows;$i++){
print "[SELECTデータ->$i]\n";
for($j=0;$j<13;$j++){
print "$selectdata[$i][$j]\n";
}
print "<BR>\n";
}

表示されたデータが3件とも、3番目のデータが表示されます。
フェッチで取得したデータを配列にいれる段階で、上書きしているような気がするのですが、具体的にどこが悪いか分かりません。
ご教授お願いいたします。

こんにちは。perl + html + mysqlのコーディングで悩んでいるので質問させてください。
複数フィールド+複数件(例えば13フィールド+3件)のデータがテーブルに存在する時、SELECT文でそのデータを取得したいとします。
分からない所はフェッチの部分なのですが、

$i=0;
while($selectdata[$i]=$sth->fetchrow_arrayref(
$i++;
}

----[中略]-----

for($i=0;$i<$rows;$i++){
print "[SELECTデータ->$i]\n";
for($j=0;$j<13;$j++){
print "$selectdata[$i][$j]\n";
}
...続きを読む

Aベストアンサー

いや、
>$i=0;
>while($selectdata[$i]=$sth->fetchrow_arrayref(
>$i++;
>}
これを

my @selectdata;
while ( my $array_ref = $sth->fetchrow_arrayref ) {
push @selectdata, [ @{$array_ref} ];
}

みたいな感じで受け取ったリファレンスを一旦デリファレンスして、
その要素を含む新しい無名配列を生成すれば良いと思いますけど。

QAccessの追加クエリで既存のテーブルに上書き追加をしたい

追加クエリを使用して既存テーブル(マスタテーブルとして使用)に「情報追加+変更箇所上書き」の作業をしたいと思うのですが、型変換エラー(キー違反)となってしまします。解決方法をご存知の方がおられましたら、ご教示願えればと思います。

Aベストアンサー

既存のキーをレコードの追加はできません。
存在する部分は、更新クエリーで処理します。
存在しない場合は、追加クエリーで追加します。
追加クエリーの対象は、不一致クエリーで対象を把握できます。

QiPhone「データの取得方法」について

こんにちは。先々月くらいにiPhoneを購入した者です。
iPhoneの「データ取得方法」について質問があります。
予想外にパケット通信料の請求が多かったため、サファリや天気など通信
を必要とするアプリを使用しないようにし、「データの取得方法」をフェ
ッチの15分ごとに変更しました。ただ、「データの取得方法」のプッシュ
とフェッチの違いがよく分かっておらず、プッシュをONにしたままが通信
の節約になるのか、それともフェッチの15分間隔(若しくは30分)が良い
のか分かりません。メールの量は送受信併せて1日30~40で、使わない時
は全く使いません。ただ緊急を要するメールもあるので手動でのメール
取得は考えていません。
前述したように、プッシュとフェッチどちらがパケットの節約になるのか
教えていただきたいと思います。その他パケット通信節約のための小ネタ
などがあれば教えてください。
よろしくお願い致します。

Aベストアンサー

ExchangeServerやMobileMeなど、サーバ側から自動的に送られてくるメールがプッシュメール、通常のメールのように自分から取りに行くメールがフェッチです。
プッシュであれば一定時間ごとにメールボックス確認に行く手間がないため、その分安くはなります。
が。通常のメールをプッシュで使うことはできないので、基本的に選択肢はあってないようなものです。
ExchangeServerやMobileMe使ってなければ、回答としては変わらないってことになります。

ただ、基本的に通信をおこないまくる携帯なので、パケット通信はかかるもんだと思っておいたほうがいいです。

QAccessの追加クエリの方法(重複データをオートナンバーでキー作成)

Access2003使用

追加クエリを使い、キー設定してあるフィールドにデータを追加していきたいのですが、重複しているデータがあるのでこの重複しているフールドは追加先のオートナンバーフィールドで振られる番号を追加して追加したいと思います。

元データ
番号  商品  金額
123-222 だんご 100
123-223 アイス 200
123-222 だんご 150

追加先データ
番号  商品  金額 オートNO
123-333 赤飯  100  1
123-444 ご飯  200 2
123-555 五平餅 150 3
123-222/4 だんご 100 4
123-223  アイス 200 5
123-222/6 だんご 150 6
とやりたいのですが、良い方法は無いでしょうか?
よろしくお願いします。

Aベストアンサー

このオートナンバーを使うのは、決定した仕様でしょうか。
私が考えれる範囲では、かなり厳しい仕様なのでは、と思ってしまいます。

番号  商品  金額 オートNO
123-333 赤飯  100  1
123-444 ご飯  200 2
123-555 五平餅 150 3

ここに

番号  商品  金額
123-222 だんご 100
123-223 アイス 200
123-222 だんご 150

を追加したら、

番号  商品  金額 オートNO
123-333 赤飯  100  1
123-444 ご飯  200 2
123-555 五平餅 150 3
123-222/4 だんご 100 4
123-223  アイス 200 5
123-222/6 だんご 150 6

に、ということですよね。

さらに

番号  商品  金額
123-222 だんご 100
123-223 アイス 200
123-222 だんご 150

を追加したらどうなるのでしょう。

番号  商品  金額 オートNO
123-333 赤飯  100  1
123-444 ご飯  200 2
123-555 五平餅 150 3
123-222/4 だんご 100 4
123-223  アイス 200 5 ←ここも書換え?
123-222/6 だんご 150 6
123-222/7 だんご 100 7 ←?
123-223/8 アイス 200 8 ←?
123-222/9 だんご 150 9 ←?

オートナンバーは、レコードを登録した際に確定する数値だった(?)と思うので、
1度仮の番号で登録、
オートナンバー値を取得、
重複番号をチェックし、
加工した番号で更新
以前のオートナンバーなし番号に対して更新処理+α
(α:他のテーブルデータの書き換えもあり?)
というような流れになるのかもしれません。
VBAでの記述になるのでしょうか。


以下のような変更では?

番号  細番 商品  金額
123-333 1  赤飯  100
123-444 1  ご飯  200
123-555 1  五平餅 150
123-222 1  だんご 100
123-223 1  アイス 200
123-222 2  だんご 150
123-222 3  だんご 100
123-223 2  アイス 200
123-222 4  だんご 150

「細番」は、番号が重複した際の数値
追加時に、番号がなかったら、細番=1
あったら、細番=Max(細番)+1 (その番号での細番最大値+1)
IIF で DLookup や DMax を使えば、クエリでもできると思います。

番号と細番で、主キーとするのでしょうか。

※ 何に使うテーブルなのかわからないので、これがいいのかわかりません。


識者の回答を待って下さい。

このオートナンバーを使うのは、決定した仕様でしょうか。
私が考えれる範囲では、かなり厳しい仕様なのでは、と思ってしまいます。

番号  商品  金額 オートNO
123-333 赤飯  100  1
123-444 ご飯  200 2
123-555 五平餅 150 3

ここに

番号  商品  金額
123-222 だんご 100
123-223 アイス 200
123-222 だんご 150

を追加したら、

番号  商品  金額 オートNO
123-333 赤飯  100  1
123-444 ご飯  200 2
123-555 五平餅 150 3
123-222/4 だん...続きを読む

QPL/SQL内の共通関数の引数にフェッチしたレコードごと渡すのは可能?

カーソルでレコードを検索し、フェッチします。
その後、INSERTする共通関数を呼ぶのですが、
フェッチしたレコードの値でINSERTしたいのです。
引数で1コずつ渡すと数が多いので、フェッチしたレコードごと引数で渡せないかと
それって可能ですか?

Aベストアンサー

こんにちは。

 共通関数の引数にカーソルのレコード型(cursor_name%ROWTYPE)を
使用すればよいと思います。
ただこの場合は、汎用性に乏しいのですが・・・。

 よって個人的にはINSERT先のテーブル名のレコード型が
お勧めです。[テーブル名%ROWTYPE]
 カーソルのレコードから移し変える処理が必要になりますが、
登録処理が簡単に記述できますネ。
(INSERT INTO TAL_NAME VALUE record_type;)

Q重複なしのフィールドにつき、重複データ挿入時上書きする設定は?

こんにちは。
主キーないしユニークキーなどで、
重複しない設定にしたフィールドで、
重複データを入力されたとき、
入力できないのではなく、上書きされる、
設定にしたいのですが、
どのような方法が、あるでしょうか。
(いちいち、古いデータを削除しなければ、
ならないのでしょうか。)
お願いします。

Aベストアンサー

こういう事情は最初に説明しなきゃ
あるテーブルの値で既存のテーブルを書き換えたいのなら更新クエリです

INSERじゃなくUPDATEね

既存テーブルと書き換えデータを持ったテーブルを
クエリデザインビューに取り込み、主キーで結合
既存テーブルから主キー以外を取り出し
更新クエリに変えて、レコードの更新欄に書き換えデータテーブルのフィールドを指定します

Qデータハザードについて(パイプライン)

こんにちは。コンピューターアーキテクチャのパイプラインの項目の勉強をしていて、データハザードについて分からない問題があったので、質問させていただきます。

以下の二つのパイプラインの動作がよくわかりません。


基本的にはフォワーディングによって解決するデータハザードですが、メモリアドレス生成のときはフォワーディングは間に合わないので、結果の格納(W)が終わらないと命令フェッチ(F)ができないそうです。つまり
add r1, r2 .r3    F D E W
lw r4, dpl(r1)         F X X DEW

となるそうです。しかし
ld r2, c(r1)
subi r1, r1, 4
のように「ロード命令の次に算術命令」という順番ですと、ハザードは生じないそうです。


下の場合は上と違いr1のデータを更新するだけなのでフォワーディングによって改善ができるという解釈でよろしいのでしょうか?
上は本に書いてあったものなのですが、下のはインターネットから調べたものなのであっていない可能性があるので質問しました。

ちなみに両者ともロード命令の場合なのですが、ストア命令でも同じような振る舞いになるのでしょうか?

よろしくお願いいたします。

こんにちは。コンピューターアーキテクチャのパイプラインの項目の勉強をしていて、データハザードについて分からない問題があったので、質問させていただきます。

以下の二つのパイプラインの動作がよくわかりません。


基本的にはフォワーディングによって解決するデータハザードですが、メモリアドレス生成のときはフォワーディングは間に合わないので、結果の格納(W)が終わらないと命令フェッチ(F)ができないそうです。つまり
add r1, r2 .r3    F D E W
lw ...続きを読む

Aベストアンサー

「データハザード」ってのは, 端的にいうと「ある命令で得られた結果をそのあとの命令で使うために, 前の命令が終わるまで『あとの命令』の実行を止めなきゃならない」って状態.

ここに挙がっている例だと, 上のやつは add で得られた r1 を次の lw で使うから, 「r1 が得られるまで lw を実行できない」ということになる. ところが下の場合には ld の結果である r2 はそのあとで使わないから, ここで見えている分についてはハザードは生じていない (さらにあとの命令で r2 を使っていたら, ld とのタイミングでハザードが起きるかもしれん). あるいは,
ld r1, c(r2)
subi r1, r1, 4
なら明らかにハザードが起きる.

そして, はっきりいうと「ロードの場合はメモリからレジスタにデータを移すので算術命令のデータがメモリに書き込まれるまではストールしてしまう」というのは何をいっているのかよくわからん. もっというと「算術命令のデータがメモリに書き込まれる」とか「算術命令がメモリにデータを書き込む」とかの意味がわからん. どういうこと? どうせ MIPS かなんかの RISC なんだろうから, そもそも「算術命令の結果」がメモリに書き込まれることはありえないよ.

それぞれの命令を実行するために「確定していなければならないデータ」がなんなのか, そしてそれらが「どのタイミングで確定するのか」を確認してください. ここの例だと「add の結果がどこで出てきてどのタイミングにフォワーディングできるのか」とか「メモリアドレスをどのタイミングで生成するのか」とか, です.

とはいえ, 上の例で「どのステージが同時に起きているのか」がわからないんだよね.... add の D と lw の F が同じクロックと思っていい?

参考URL:http://akademeia.info/index.php?%A5%D1%A5%A4%A5%D7%A5%E9%A5%A4%A5%F3%A5%CF%A5%B6%A1%BC%A5%C9

「データハザード」ってのは, 端的にいうと「ある命令で得られた結果をそのあとの命令で使うために, 前の命令が終わるまで『あとの命令』の実行を止めなきゃならない」って状態.

ここに挙がっている例だと, 上のやつは add で得られた r1 を次の lw で使うから, 「r1 が得られるまで lw を実行できない」ということになる. ところが下の場合には ld の結果である r2 はそのあとで使わないから, ここで見えている分についてはハザードは生じていない (さらにあとの命令で r2 を使っていたら, ld とのタイミングで...続きを読む

Qデータベースの索引

oracle masterの問題関連で質問があります。
一般的にデータベースで
CREATE INDEX myind ON mytbl(a,b,c)
と索引を作成した場合に
SELECT a FROM mytbl ORDER BY a;
この場合myindの索引は使用されるのでしょうか?

Aベストアンサー

#3です。

>ご指摘の通りorder byでは索引されないのですね。
私はそんなことはいっていませんよ。
参考URLはご覧になりましたか?

こちらの「Order By句の使用」のところにも同様のことが書かれています。
http://www.int21.co.jp/pcdn/oracle/article/optimizer.html

「Order By句では、表にNot Null指定されてる場合に限り索引が使用されます」
ということではないですか?
今、手許にOracleがないのでテストしていませんので自信ありとはしませんが。

参考URL:http://www.int21.co.jp/pcdn/oracle/article/optimizer.html

Q「スーパーフェッチ」と「プリフェッチ」の違い

Vistaで「スーパーフェッチ」機能とはよく使用するアプリケーションをメモリにプリロードするとありますが、XPの「プリフェッチ」機能にも似たような記載がありました。
この両者の機能で決定的な違いは何処でしょうか?
ご存知あれば教えて頂ければ幸いです。

Aベストアンサー

どのデータをプリロードするかを選択する戦略が賢くなったということです.

XPでは単に最も最近使ったデータを優先的に選んでいましたが,Vistaでは今までの履歴を学習してより最適な(次に必要になりそうな)データを選ぶようになりました.

参考URL:http://pc.watch.impress.co.jp/docs/2007/0226/mobile366.htm

QUPDATEで既存のレコードに文字列を追加したい

いつもお世話になります。
SQL文で質問があります(環境はPHP+SQLiteです)。

keywordというカラムがあって、そこにはキーワードとして使う文字列が入っています。
(データベースを検索するときに使うタグを集めたようなものです)
例えば、

"本 料理 ブック cooking book"

という感じです。

UPDATEで、このカラムに別のキーワードを追加したい場合、どのようなSQL文にすれば良いのでしょうか?
追加するキーワードは既存のキーワードと重複しないように追加したいです。

例えば、すでに"本 料理 ブック cooking book"というレコードがあるので、UPDATEで「レシピ」を追加したら"本 料理 ブック cooking book レシピ"となるように、「本」を追加する場合はすでに「本」という文字列があるので既存のままで変更なしにしたいです。

そもそもこのようなことはSQL文でできるのでしょうか?

できないとしたら一旦SELECTでkeywordのレコードを取得してPHPで改変したものをUPDATEで上書きするしかないでしょうか?

どうぞよろしくお願い致します。

いつもお世話になります。
SQL文で質問があります(環境はPHP+SQLiteです)。

keywordというカラムがあって、そこにはキーワードとして使う文字列が入っています。
(データベースを検索するときに使うタグを集めたようなものです)
例えば、

"本 料理 ブック cooking book"

という感じです。

UPDATEで、このカラムに別のキーワードを追加したい場合、どのようなSQL文にすれば良いのでしょうか?
追加するキーワードは既存のキーワードと重複しないように追加したいです。

例えば、すでに"本 料理 ブック co...続きを読む

Aベストアンサー

SQLite環境ないため無試験ですが。

構文は参考URLを参照

かんたんに書いておくと
update テーブル名 set 更新列名 = 更新内容 [where条件];
ですよ

set 更新列名 = 更新内容は

set keyword = keyword || 'あああ'
と書ける。等式ではなく代入なのでA=A+1と同じ

でも追加したいキーワードが "本" のとき
keywordが '本社 料理' だったり '貸本 ブック cooking book'だったら
"本" を追加するんですよね?

なのでキーワードを区切る半角スペースを含め判断が必要。

where条件で like検索してNotで否定。つまり含まれないなら更新対象。
Keywordには先頭に、追加文字列は前後に半角スペース補ってから判断。

update テーブル名
set keyword = keyword || ' ' || 追加キーワード
where (' ' || keyword || ' ') not like (' ' || 追加キーワード || ' ')
;
かな

参考URL:http://rktsqlite.sourceforge.jp/sqlite/manip.html#update

SQLite環境ないため無試験ですが。

構文は参考URLを参照

かんたんに書いておくと
update テーブル名 set 更新列名 = 更新内容 [where条件];
ですよ

set 更新列名 = 更新内容は

set keyword = keyword || 'あああ'
と書ける。等式ではなく代入なのでA=A+1と同じ

でも追加したいキーワードが "本" のとき
keywordが '本社 料理' だったり '貸本 ブック cooking book'だったら
"本" を追加するんですよね?

なのでキーワードを区切る半角スペースを含め判断が必要。

where条件で like検索してNotで否定。...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング