![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
以下の様な2つのテーブルが有った場合、[商品テーブルA]と[商品テーブルB]
の商品名フィールド同士の商品名が部分一致した場合、
[商品テーブルB]のIDフィールドに[商品テーブルA]のIDフィールドのID番号を
付与したいと考えております。
この様な場合のSQL文を教えて頂けませんでしょうか。
[商品テーブルA]
ID 商品名
-------------
1 A1AAAA
2 A1AAAB
3 A1AABB
4 A1ABBB
5 A1BBBB
[商品テーブルB]
ID 商品名
-------------
AAAB
AAAA
BBBB
AABB
ABBB
SQLの結果として[商品テーブルB]が以下の様に更新される結果を期待しています。
【結果】
[商品テーブルB]
ID 商品名
-------------
2 AAAB
1 AAAA
5 BBBB
3 AABB
4 ABBB
商品名が完全一致する場合であれば、update inner join on set を使えば上手くいのですが、
部分一致の場合どの様にすれば良いのか、行き詰っています。
以上、宜しくお願い致します。
A 回答 (11件中1~10件)
- 最新から表示
- 回答順に表示
No.11
- 回答日時:
No10の
あるいは、関数を使った使用例
のところで、以下のSQL文
SELECT TA.商品名
FROM 商品テーブルA AS TA INNER JOIN 商品テーブルB AS TB ON TA.商品名=funcAAA(TA.商品名,TB.商品名);
を
SELECT TA.商品名
FROM 商品テーブルA AS TA INNER JOIN 商品テーブルB AS TB ON TA.商品名=funcA(TA.商品名,TB.商品名);
にしてください。関数名のfuncAがfuncAAAになっていました。
No.10
- 回答日時:
一度選択クエリでデータが抽出されるか確認してみてください。
SELECT TA.商品名
FROM 商品テーブルA AS TA INNER JOIN 商品テーブルB AS TB ON TA.商品名 LIKE "*" & TB.商品名 & "*";
あるいは、関数を使った使用例
SELECT TA.商品名
FROM 商品テーブルA AS TA INNER JOIN 商品テーブルB AS TB ON TA.商品名=funcAAA(TA.商品名,TB.商品名);
選択クエリで抽出できれば追加クエリでテーブルに追加可能な
データであることは確認できます。あとは追加先のテーブルの
フィールドの型とか。
あるいは、追加先テーブルと基テーブルの名前を入れ間違えている
といことは・・・・?
No.9
- 回答日時:
No8のSQL
フィールド名を置き換える時の注意点として
[]←カギ括弧は、全て残したままにしてください
[商品テーブルA]→商品テーブル本番 はNG
[商品テーブルA]→[商品テーブル本番] はOK
No.8
- 回答日時:
No.1です。
UPDATE [商品テーブルB] INNER JOIN [商品テーブルA] ON [商品テーブルA].[商品名] Like "*" & [商品テーブルB].[商品名] SET [商品テーブルB].[ID] = [商品テーブルA].[ID];
今一度、上記SQLをコピペし、
商品名テーブル等をご使用のフィールド名に置き換えて実行してみてください。
その際、反応が返ってこないというのが分かりづらいのですが、
エラー等のメッセージ何も無く、
商品テーブルBも何も更新されていない状況なのでしょうか?
No.7
- 回答日時:
A13AAAA
A1AAAB32
A1PP6AABBAA
A1ABBBABBB
A1BBBB
A5ABBBTABBB
AAAB
AAAA
BBBB
AABB
ABAB
実はNo4さんの方法でも抜けてしまう文字列が
あります。たとえば、上記の場合、4番目が
カウントされてしまいます。同じ文字列が
複数ある場合の誤作動ということで言えば、
No3と似かよってはいますが。
(1)後ろからの完全一致
(2)文字列は一回のみ出現
(3)前からはあいまい
ということを満たそうとすれば関数を作る
必要があります。以下の関数です。
以下の関数を標準モジュールに貼り付け保存します。
(コメント付き)
'文字列str1に文字列str2の出現回数が一回であるか求める。
'出現位置が後ろからの位置と同じかを求める。
'上記が一致したらstr1を返す。
'一応テキストモードで比較
Function funcA(ByVal str1 As String, ByVal str2 As String) As String
If InStrRev(str1, str2) = Len(str1) - Len(str2) + 1 Then
If UBound(Split(str1, str2)) = 1 Then
funcA = str1
End If
End If
End Function
この関数を使って以下のようにします。
UPDATE 商品テーブルB INNER JOIN 商品テーブルA ON [商品テーブルA].[商品名]=funcA(商品テーブルA.商品名,商品テーブルB.商品名) SET 商品テーブルB.ID = [商品テーブルA].[ID];
この回答への補足
回答ありがとうございます。
何故だかわかりませんが、皆さんからいただいたSQLを実行すると
一向に結果が帰って来ない状況です・・・。
たかだか1200行にみたない処理なのですが・・・原因不明ですが、私(Access2003)と他の人間(Access2007)の環境でも一緒でした。
No.5
- 回答日時:
A13AAAA
A1AAAB32
A1PP6AABBAA
A5ABBBTTABBB
A5ABBBABBB
A66BBBB66
No4さんのいう誤作動を起こす場合と言うのは、
上記の4番目あるいは5番目の同じ文字列が含まれる場合を
指しているのでしょう。
まあ、そのような場合があるのならば質問された方が
補足されるでしょう。連続した文字列を商品名に
書くようなことはお目にかかったことはないので。
それと、No4で表示されているSQL文が不完全なので、
以下のように。
UPDATE 商品テーブルB INNER JOIN 商品テーブルA ON [商品テーブルA].[商品名] Like "*" & [商品テーブルB].[商品名] & "" SET 商品テーブルB.ID = [商品テーブルA].[ID];
この回答への補足
回答ありがとうございます。
何故だかわかりませんが、皆さんからいただいたSQLを実行すると
一向に結果が帰って来ない状況です・・・。
たかだか1200行にみたない処理なのですが・・・原因不明ですが、私(Access2003)と他の人間(Access2007)の環境でも一緒でした。
No.4
- 回答日時:
No.1です。
No.3の方の回答でほぼ問題はないとは思います。
多少気になるのとしては、前方後方のあいまい検索なので、
テーブルの商品名表記の仕方によっては誤動作します。
(テーブルの内容によっては、No.3様のご回答通りで問題無いとは思います)
なので、一応、前方あいまい、後方完全一致に修正させて頂いて
update 商品テーブルB inner join 商品テーブルA.商品名 Like "*"&商品テーブルB.商品名 set 商品テーブルB.ID=商品テーブルA.ID
でいいかと思います。
この回答への補足
回答ありがとうございます。
何故だかわかりませんが、皆さんからいただいたSQLを実行すると
一向に結果が帰って来ない状況です・・・。
たかだか1200行にみたない処理なのですが・・・原因不明ですが、私(Access2003)と他の人間(Access2007)の環境でも一緒でした。
No.3
- 回答日時:
以下ではどうですか?
UPDATE 商品テーブルB INNER JOIN 商品テーブルA ON [商品テーブルA].[商品名] Like "*" & [商品テーブルB].[商品名] & "*" SET 商品テーブルB.ID = [商品テーブルA].[ID];
この回答への補足
回答ありがとうございます。
何故だかわかりませんが、皆さんからいただいたSQLを実行すると
一向に結果が帰って来ない状況です・・・。
たかだか1200行にみたない処理なのですが・・・原因不明ですが、私(Access2003)と他の人間(Access2007)の環境でも一緒でした。
No.2
- 回答日時:
No.1です。
Aのテーブル更新かと思ったらBなんですね。
読み間違えてました。
一発変換だと、こんなSQLではどうでしょうか?
update 商品テーブルB inner join 商品テーブルA on 商品テーブルB.商品名=Mid(商品テーブルA.商品名,3) set 商品テーブルB.ID=商品テーブルA.ID
この回答への補足
回答有難う御座います。
サンプルのテーブルとデータ内容ですが、対象の文字列を
A1AAAA
A1AABB
の様にしていましたが、商品名の「A1」部分の文字数は定まった
文字数ではなく、それぞれの商品で違うと考えてやって下さい。
説明不足であった点、申し訳有りません。
どうぞ、お力お貸し下さい。
以上、宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- SQL Server SQLのクエリの書き方 1 2022/03/29 23:06
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- その他(データベース) accessについて 2 2022/05/31 16:58
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Excel(エクセル) excelで検索した商品の画像(ネットワーク上の)を表示させたい。 3 2023/06/28 00:32
- Visual Basic(VBA) 【ExcelVBA】Powerクエリーでいうピボット解除と同じ処理をVBAで 4 2022/07/06 17:09
- その他(データベース) accessでの請求管理について 2 2022/06/13 21:51
- その他(データベース) c言語の問題です。これを踏まえてコーディングしたいのでおしえていただきたいです。 3 2023/08/03 09:27
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
Accessで、フォームからフォームへ値を引き継ぐやり方
Access(アクセス)
-
Access]2つのテーブルを比較してフィールドの一部が一致したデータを抽出
Access(アクセス)
-
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
-
4
パラメータが少なすぎます。1を指定して下さい。""
Excel(エクセル)
-
5
アクセスの初心者の質問です(空白の場合に他のフィールドを表示させたい。)
Access(アクセス)
-
6
Accessクエリでの、LIKE条件
その他(データベース)
-
7
falseとtrue 0,1,-1 の意味が知りたいです
PowerPoint(パワーポイント)
-
8
アクセス 部分一致の抽出
その他(Microsoft Office)
-
9
アクセス VBAについて FROM句の構文エラー
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLあってますか?こう?
-
男性と2人で飲食店に行きテーブ...
-
L2SWはARPテーブルを持っている?
-
まるいテーブル 円い 丸い 漢字...
-
オフ会の席替えについて(8人...
-
vers か a か(フランス語)
-
複数テーブルにわたるCOUNT
-
JavaScriptでAccessのテーブル...
-
【PHP】SQL文のSUM関数で出力し...
-
phpMyAdminの「リレーションを...
-
アクセスのリンクテーブル一覧...
-
バイキングのトレーの形
-
テーブルリンク リンク元を知...
-
MACアドレス見えない
-
ピグライフ、パーティーテーブ...
-
[SQL]複数のカラムに重複内容を...
-
SQLでテーブルの値を集計して、...
-
ACCESS97でテーブルをロック
-
複雑なSQL文について
-
外部キーだけのテーブル(主キ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
L2SWはARPテーブルを持っている?
-
外部キーだけのテーブル(主キ...
-
男性と2人で飲食店に行きテーブ...
-
テーブルリンク リンク元を知...
-
会社の飲み会の幹事になり、座...
-
「テーブルに座って……」という...
-
アクセスのリンクテーブル一覧...
-
ターンテーブルの、電子レンジ...
-
飲み会で、座敷orテーブルどち...
-
【PHP】SQL文のSUM関数で出力し...
-
テーブル:生徒名簿 生徒名簿の...
-
まるいテーブル 円い 丸い 漢字...
-
1対1のリレーション(主キー同...
-
論理名とコメント構文(?)について
-
面接のときテーブルが正面に。...
-
一致するデータのみ削除したい
-
複雑なSQL文について
-
SQL構文です 画像のようにした...
-
件数の多い順にselect
-
お金持ちのテーブル
おすすめ情報