質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

3回答

7075閲覧

Accessクエリ 複数条件での更新クエリ

GoogleWindows

総合スコア23

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2020/06/10 01:11

Access初心者です。

テーブルには、受注番号と商品IDフィールドがあり、
以下のような構造になっています。

配送ID  受注番号  商品ID
5     1548315   11147
5     1548315   11146
5     1549647   11146
5     1551248   25587
5     1551248   16475

この中で、11147と11146の商品IDの両方を含む受注番号を抽出し、その配送IDを5から6に更新したいと思っています。

同じ状況の記事が見つけられず、検索しても異なる問題しかヒットしないため
初歩的なことだとは知りながらも、ご質問させていただきました。

集計クエリで前もって受注番号のみを抽出すると更新クエリが使えなくなるため
同フィールドにある11147と11146をどのようにして
抽出するのかがまず分かりませんでした。

どうかお力添えをよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

受注番号が条件で重なるものですね。

SQL

1update テーブル set 配送ID=6 2where 配送ID=5 3 and 受注番号 in (select 受注番号 from テーブル where 商品ID=11147) 4 and 受注番号 in (select 受注番号 from テーブル where 商品ID=11146)

投稿2020/06/10 01:30

sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

GoogleWindows

2020/06/10 02:22

sazi様 ご回答いただき、ありがとうございます。 早速試しましたところ、所望していた結果になりました! 素晴らしいです! なるほど、個別にselectすれば、ANDで繋げても同一レコードにはならないのですね! 長時間悩んでいた部分ですので、大変参考になりました。 深く感謝申し上げます。
guest

0

回答出ていますが、こんな感じはどうでしょうか。

SQL

1UPDATE 受注Table SET 配送ID=6 2WHERE 受注番号 IN 3( 4SELECT distinct ken.受注番号 from 5 ( 6 SELECT 受注番号 , count(*) as 件数 FROM 受注Table 7 WHERE 商品ID in (11147,11146) 8 group by 受注番号 9 ) as ken 10WHERE 件数 >= 2 11);

投稿2020/06/10 02:33

編集2020/06/10 02:44
tosi

総合スコア553

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sousuke

2020/06/10 02:46

入れ子はhavingで不要になる気がします。 where 受注番号 in ( SELECT 受注番号 FROM 受注Table WHERE 商品ID in ('11147','11146') group by 受注番号 having count(*)>=2 )
sazi

2020/06/10 02:47

無駄が多いです。 やるなら、 UPDATE 受注Table SET 配送ID=6 WHERE 受注番号 IN ( SELECT 受注番号 FROM 受注Table WHERE 商品ID in ('11147','11146') group by 受注番号 having count(*) >=2 )
GoogleWindows

2020/06/10 03:43

tosi様 ご回答いただき、ありがとうございます。 sazi様から正答をいただいた後でしたが、せっかくですので試してみました。 残念ながら、Accessが一時フリーズしてしまい、結果も所望するものとは違うデータが複数出てきて正しく抽出されませんでした。 しかし、色々な方法があることを知れて参考になりました。 ありがとうございました。
tosi

2020/06/10 04:49

>結果も所望するものとは違うデータが複数出てきて・・・・・・・・・ 不思議ですね、サンプルデータからは行く筈ですが・・・・。 内側からSELECT毎に分解して、一つずつやっていくと間違いが見えます。 気が付かないミスありましたら、ご指摘頂ければ幸いと思います。
sazi

2020/06/10 04:53

多分、配送ID=5を条件に加える必要があるのではないかと思います。
sazi

2020/06/10 04:56

データ補正は、無駄になりそうな条件でも、絞れるだけ絞るようにした方が、対象外のデータに影響を及ぼさないですからね。
tosi

2020/06/10 05:00

了解致しました。
guest

0

SQL

1update テーブル名 set 配送ID = 6 2 where 商品ID in (11147, 11146);

こんな感じ?
文字型のカラムならクォートしてください。

投稿2020/06/10 01:17

DreamTheater

総合スコア1095

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sousuke

2020/06/10 01:20

横から失礼。私も最初そう思ったんですが。 「両方の商品IDを持つ受注番号を~」とあるので更新対象は上2行だけなのかなと思っています。 そうなるとクエリのGUIでやるのは少し厳しいですが
DreamTheater

2020/06/10 01:47

sousukeさんコメントありがとうございます。 (どうりで簡単すぎでした、、、)
GoogleWindows

2020/06/10 02:04

DreamTheater様 sousuke様 ご回答いただき、ありがとうございます。 sousuke様のご指摘にありますとおり、両方を含む受注番号が取得できませんでした。 けれど、SQLで示していただき、とても参考になりました。 今後の肥やしにしたいと思います。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問