Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


455 / 2272 ツリー ←次へ | 前へ→

【11611】テーブルのリレーションシップについて まい 10/4/19(月) 14:50 質問[未読]
【11617】Re:テーブルのリレーションシップについて 超初心者 10/4/20(火) 11:31 発言[未読]
【11625】Re:テーブルのリレーションシップについて まい 10/4/21(水) 13:49 質問[未読]
【11626】Re:テーブルのリレーションシップについて まい 10/4/21(水) 13:52 質問[未読]
【11629】Re:テーブルのリレーションシップについて 超初心者 10/4/22(木) 8:45 発言[未読]
【11633】Re:テーブルのリレーションシップについて まい 10/4/23(金) 11:32 質問[未読]
【11634】Re:テーブルのリレーションシップについて まい 10/4/23(金) 13:29 質問[未読]
【11636】Re:テーブルのリレーションシップについて 超初心者 10/4/23(金) 16:19 発言[未読]
【11641】Re:テーブルのリレーションシップについて まい 10/4/26(月) 11:16 質問[未読]
【11642】Re:テーブルのリレーションシップについて 超初心者 10/4/26(月) 14:13 発言[未読]
【11643】Re:テーブルのリレーションシップについて まい 10/4/26(月) 14:44 お礼[未読]

【11611】テーブルのリレーションシップについて
質問  まい  - 10/4/19(月) 14:50 -

引用なし
パスワード
   リレーションシップの設定でワイルドカード*は使えるのでしょうか?

今、2つのテーブルがあります

テーブル1
品目  品目2  コード
AAA*  123*4   A
AB*A  456*0   A
EEE-* 75878   A

など、*を含んだデータが12万件ほどあります

テ−ブル2
品目3 区分  数量 
BBB7  2    1
AAA8  2    1
AB6A  5    2
AB7A  5    2
EEE-8 2    2
EEE-1 1    1

など、テ-ブル1の*の部分が数字やアルファベットになったものがあり、
それを、結合させたいと思ってます

結果
品目3 区分   数量  品目
BBB7  2    1     
AAA8  2    1    AAA*
AB6A  5    2    AB*A
AB7A  5    2    AB*A
EEE-8 2    2    EEE-*
EEE-1 1    1    EEE-*

上記のようにしたいのですが、
どのようにしたらよいのか、悪戦苦闘してます
何か、良いアドバイスをお願いします


 

【11617】Re:テーブルのリレーションシップについて
発言  超初心者  - 10/4/20(火) 11:31 -

引用なし
パスワード
   ▼まい さん:
既に確認済みとは思いますが、INNER JOIN などでの
リレーションは出来ません。

変則的(?)な方法ですが、
WHERE条件で抽出することになるかと思います。

しかも
> 結果
> 品目3 区分   数量  品目
> BBB7  2    1     
LEFT JOIN のようで、更に変則的に!?


少しごちゃごちゃしてますが、

SELECT UQ.品目3, UQ.区分, UQ.数量, Last(UQ.品目) AS 品目
FROM (SELECT テーブル2.*, Null As 品目
FROM テーブル2
UNION
SELECT テーブル2.*, テーブル1.品目
FROM テーブル1, テーブル2
WHERE テーブル2.品目3 Like Replace([テーブル1]![品目],"*","?")
) AS UQ
GROUP BY UQ.品目3, UQ.区分, UQ.数量;

一応、質問例のものは実現できました。
後の作業がどのようなものかは分かりませんが、
作業テーブルを作って、追加・更新していく方が良いかもです^^;

参考までに。

【11625】Re:テーブルのリレーションシップについて
質問  まい  - 10/4/21(水) 13:49 -

引用なし
パスワード
   ▼超初心者 さん:
>
何度もすみません
もう一ついいですか?
下記の記述で、 Last(UQ.品目)となっていますが、
Lastとはどういう意味を表しているのでしょうか?
超初心者で申し訳ありません

>
>SELECT UQ.品目3, UQ.区分, UQ.数量, Last(UQ.品目) AS 品目
>FROM (SELECT テーブル2.*, Null As 品目
>FROM テーブル2
>UNION
>SELECT テーブル2.*, テーブル1.品目
>FROM テーブル1, テーブル2
>WHERE テーブル2.品目3 Like Replace([テーブル1]![品目],"*","?")
>) AS UQ
>GROUP BY UQ.品目3, UQ.区分, UQ.数量;
>
>一応、質問例のものは実現できました。
>後の作業がどのようなものかは分かりませんが、
>作業テーブルを作って、追加・更新していく方が良いかもです^^;
>
>参考までに。

【11626】Re:テーブルのリレーションシップについて
質問  まい  - 10/4/21(水) 13:52 -

引用なし
パスワード
   ▼超初心者 さん:

ありがとうございます

質問いいですか?
下記の記述で、UQという言葉がでてきてますが、
これは、今、SQLで、結合しようとしているクエリのことを指しているのでしょうか?


>SELECT UQ.品目3, UQ.区分, UQ.数量, Last(UQ.品目) AS 品目
>FROM (SELECT テーブル2.*, Null As 品目
>FROM テーブル2
>UNION
>SELECT テーブル2.*, テーブル1.品目
>FROM テーブル1, テーブル2
>WHERE テーブル2.品目3 Like Replace([テーブル1]![品目],"*","?")
>) AS UQ
>GROUP BY UQ.品目3, UQ.区分, UQ.数量;

【11629】Re:テーブルのリレーションシップについて
発言  超初心者  - 10/4/22(木) 8:45 -

引用なし
パスワード
   ▼まい さん:
INNER JOIN の代わりに
WHERE 〜 Like にて抽出しています。

今回は LEFT JOIN を希望されていたようなので、
更に(品目が)空白のものをユニオンクエリにて
追加しています。
テーブル2の全レコードと、
テーブル1とテーブル2で一致したレコード(INNER JOINもどき?したもの)
それをくっつけたものがUQです。
名前は適当です(UNION QUERYから付けました^^;)

それを品目以外でグループ化し、品目の最終データ(LAST)を
抽出してます。

【11633】Re:テーブルのリレーションシップについて
質問  まい  - 10/4/23(金) 11:32 -

引用なし
パスワード
   ▼超初心者 さん:
お返事ありがとうございます

超初心者さんの記述どおり、作成してみたところ
少ないデータで動かしてみると(例でだしたデータをそのまま使用)
うまく、いくのですが、実際のデータでやってみると、
テーブル2のデータが全部で9558件あるのに、9058件と減ってしまい、
さらに、テーブル1のデータの*を含むデータは全く載ってこないという事態に
なってます

なにが、違うのか、まったく分からないんですが…
何か、原因があるとしたら、どのような事が考えられるのでしょうか?

ずーっと悪戦苦闘しております…

【11634】Re:テーブルのリレーションシップについて
質問  まい  - 10/4/23(金) 13:29 -

引用なし
パスワード
   ▼超初心者 さん:

いろいろ試してみた結果、

456-* ⇒ 456-1
EEE-* ⇒ EEE-8

上記のようなケースなら、うまくいくのですが、

BBB* ⇒ BBB-56
ACB* ⇒ ACBQQ5

など、一桁以上に一致させようとすると、うまく一致してくれません

これは、どういったことが原因なんでしょうか?
何度もすみません…

どうか、よろしくお願いします

【11636】Re:テーブルのリレーションシップについて
発言  超初心者  - 10/4/23(金) 16:19 -

引用なし
パスワード
   ▼まい さん:
> など、一桁以上に一致させようとすると、うまく一致してくれません

すみません m(_~_)m
質問例から、こちらで勝手に一文字のみの判定かと解釈しておりました^^;;

> WHERE テーブル2.品目3 Like Replace([テーブル1]![品目],"*","?")
 WHERE テーブル2.品目3 Like [テーブル1]![品目]

こちらで確認してみて下さい。


> テーブル2のデータが全部で9558件あるのに、9058件と減ってしまい、
こちらについては、恐らく、同じデータが数件(差の分?)あるの
ではないでしょうか。
グループ化しているので、同じデータは1件としてしまいます。

解決策は・・・・・・分かりません m(_~_)m

主キーなどがあれば、それを元にLEFT JOINなどができるかもしれません。

あとは、最初に載せたように、
> 作業テーブルを作って、追加・更新していく方が良いかもです^^;
こんなところでしょうか。

【11641】Re:テーブルのリレーションシップについて
質問  まい  - 10/4/26(月) 11:16 -

引用なし
パスワード
   ▼超初心者 さん:

ありがとうございます
早速、下記のように変えてみたところ、テストのほうはうまくいきました
しかし、実際のデータを使用して、全く同じように記述しているのに、

クエリーの構文エラーです。クエリの句が不完全です

と表示されてしまいます
>
>> WHERE テーブル2.品目3 Like Replace([テーブル1]![品目],"*","?")
> WHERE テーブル2.品目3 Like [テーブル1]![品目]
>

実際のコードを下記に記述します

SELECT UQ.品目番号, UQ.[明細テキスト行 1], UQ.数量, Last(UQ.正規品) AS 正規品
FROM [SELECT [43test].*, Null As 正規品
FROM [43test]
UNION
SELECT [43test].*, テーブル3.正規品
FROM テーブル3, [43test]
WHERE [43test].品目番号 Like テーブル3!正規品
]. AS UQ
GROUP BY UQ.品目番号, UQ.[明細テキスト行 1], UQ.数量;

ひとつ気づいたのですが、
>> WHERE テーブル2.品目3 Like Replace([テーブル1]![品目],"*","?")
> WHERE テーブル2.品目3 Like [テーブル1]![品目]

WHERE [43test].品目番号 Like テーブル3!正規品

の部分を変えると、なぜか、選択クエリからユニオンクエリになってます
これが、なんらかの原因なのでしょうか?
テストのほうでは、 ,"*","?" を取っても、選択クエリのままで、
うまくいきました。

何度もすみませんが、よろしくお願いします

【11642】Re:テーブルのリレーションシップについて
発言  超初心者  - 10/4/26(月) 14:13 -

引用なし
パスワード
   ▼まい さん:
念の為確認です。

> 〜
> FROM [SELECT [43test].*, Null As 正規品
> 〜
> ]. AS UQ
> 〜

上から2行目と下から行目はそれぞれ、
> FROM (SELECT [43test].*, Null As 正規品
> 〜
> ) AS UQ
となしてますよね?
("["、"]."ではなく、"("、")")


一度、保存すると、"["、"]."に変わります。
変更時には、面倒ですが、"("、")"に戻して、動作確認後、保存です。
(ご存知かもしれませんが、念の為^^;;)

【11643】Re:テーブルのリレーションシップについて
お礼  まい  - 10/4/26(月) 14:44 -

引用なし
パスワード
   ▼超初心者 さん:

ありがとうございます

"("、")" の部分が "("、")."
となっていた為でした

そこを改善して試してみたら、うまく行きました

本当に助かりました

ありがとうございました

455 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078193
(SS)C-BOARD v3.8 is Free