Access (一般機能) |
![]() ![]() |
(指定なし : 指定なし)
文字列の一部を指定したリレーション
投稿日時: 22/09/24 17:09:19
投稿者: koppage
|
---|---|
二つのテーブルのでリレーションを行うのですが、フィールドの一部の文字列を参照してリレーションするにはどの様にすれば良いのでしょうか?
|
![]() |
投稿日時: 22/09/24 22:44:17
投稿者: hatena
|
---|---|
データベース設計としては、アンチパターンになります。
SELECT 売上テーブル.*, 商品テーブル.* FROM 売上テーブル INNER JOIN 商品テーブル ON Left(売上テーブル.商品マスター,10) = Left(商品テーブル.商品マスター,10); これはデザインビューでは設定できません。SQLビューで記述する必要があります。 このクエリは更新不可のクエリになります。 |
![]() |
投稿日時: 22/09/25 22:00:42
投稿者: koppage
|
---|---|
ありがとうございます。
|
![]() |
投稿日時: 22/09/26 10:42:19
投稿者: Suzu
|
---|---|
「リレーション」というのが、
引用: 懸念がおありかと思いますが、試せる事は試してみましょう。その上で判らない事を聞くようにしてみてはどうでしょうか。 |
![]() |
投稿日時: 22/09/26 11:32:47
投稿者: sk
|
---|---|
引用: その具体例を挙げた方がよいのではないか、というのが 現時点での印象。 引用: 「まったく規則性の無い」がないなら、固定の文字数を指定して 何らかの文字列を抽出しようとする意味も根拠もなさそうに思えますが。 |
![]() |
投稿日時: 22/09/26 16:17:37
投稿者: koppage
|
---|---|
最初に教えて頂いたSQLの記述よりも、新たなフィールドを追加するというのが適切のようですね。
|
![]() |
投稿日時: 22/09/26 17:09:20
投稿者: taitani
|
---|---|
横から失礼します。(回答ではありません)
|
![]() |
投稿日時: 22/09/26 17:14:36
投稿者: sk
|
---|---|
引用: その「テキストメッセージ」の具体例を挙げられない限り、 本当に規則性が全くないのか否かも第三者には評価のしようがありません。 もし本当に「『人の目』で判別できる」のであれば、少なくとも その文字列の中には「商品を指し示す文字列(商品名や商品コードなど)」と 「販売された個数を示す文字列」のペアが必ず含まれているはずです。 どちらか一方が欠けているということはあり得ません。 ならば、それらの要素をどのような手法によって機械的に抜き出すか、 どのようにして商品マスタのレコードと照合するかということが 問題になってくるわけで、それにはまず「テキストメッセージ」として 格納されている文字列の解析が絶対不可欠でしょう。 引用: それは「利用しているサービスごとに CSV ファイルの出力フォーマットが異なる」 (だから「全サービス共通の規則性」がない)という意味でおっしゃっているのでしょうか。 |
![]() |
投稿日時: 22/09/27 11:09:50
投稿者: koppage
|
---|---|
>それは「利用しているサービスごとに CSV ファイルの出力フォーマットが異なる」
|
![]() |
投稿日時: 22/09/27 11:29:21
投稿者: Suzu
|
---|---|
引用: 引用: CSVから 商品マスターを作ろうとするのが間違いでは? 商品として 出品する段階で、マスター登録をしておき テキストメッセージ のデータ から 商品マスターに登録されている商品名の文言が含まれているか を判定する方が 効率的と思います。 テキストメッセージ の中身からどうしてもと言うなら データ --------------------------------------------- メッセージ --------------------------------------------- 楽天 商品A 楽天 商品B 楽天 商品C Amazon 商品A Amazon 商品B Amazon 商品A + 商品B Amazon 商品A + 商品C Amazon 商品A 1個 + 商品C 3個 --------------------------------------------- がとあるとします。 店舗名が変わる事は無いでしょうから 店舗M ----------------- 店舗ID 店舗名 ----------------- 1 楽天 2 Amazon ----------------- は予め 作成できます。 InStr関数を使い、メッセージに 店舗Mの店舗名が含まれるかどうかは判定できますよね。 SELECT 店舗M.店舗ID, 店舗M.店舗名, データ.メッセージ FROM 店舗M, データ WHERE Nz(InStr(1, データ.メッセージ, 店舗M.店舗名,0),0)>0 --------------------------------------------------------------- 店舗ID 店舗目 メッセージ --------------------------------------------------------------- 1 楽天 楽天 商品A 1 楽天 楽天 商品B 1 楽天 楽天 商品C 2 Amazon Amazon 商品A 2 Amazon Amazon 商品B 2 Amazon Amazon 商品A + 商品B 2 Amazon Amazon 商品A + 商品C 2 Amazon Amazon 商品A 1個 + 商品C 3個 --------------------------------------------------------------- これを別のワークテーブルに納めます ワークテーブル には、『メッセージ改』フィールドを用意しておきます 『メッセージ』フィールドに、Replace関数 を使い、 店舗名を【""】空白文字列に置き換え、 『メッセージ』から、店舗名を消します。 それを更新クエリを使い『メッセージ改』フィールドに入れる様にすると --------------------------------------------------------------- 店舗ID 店舗目 メッセージ改 メッセージ --------------------------------------------------------------- 1 楽天 商品A 楽天 商品A 1 楽天 商品B 楽天 商品B 1 楽天 商品C 楽天 商品C 2 Amazon 商品A Amazon 商品A 2 Amazon 商品B Amazon 商品B 2 Amazon 商品A + 商品B Amazon 商品A + 商品B 2 Amazon 商品A + 商品C Amazon 商品A + 商品C 2 Amazon 商品A 1個 + 商品C 3個 Amazon 商品A 1個 + 商品C 3個 --------------------------------------------------------------- の様になります。 ここで、メッセージ改に グループ化を行えば --------------------------------------------------------------- メッセージ改 --------------------------------------------------------------- 商品A 商品B 商品C 商品A + 商品B 商品A + 商品C 商品A 1個 + 商品C 3個 --------------------------------------------------------------- とはなりますが、【メッセージ】との事なので、 ここに表記した のみではなく、 表記以降にも文言が続いているのでしょうが 店舗名 を 消しただけでも 商品名は見易くなるかと。 以降に続くメッセージにも規則性があるでしょうから、 それらもマスター登録しておき、前述の方法を使い置換する事もできますね。 ただ、そんな使いづらいデータを わざわざ CSVファイルとするのは腑に落ちません。 店舗+メッセージであれば、「10文字」も固定では無いですよね? 10文字ない事もある と言うことであれば、固定長でもなのですよね? 個数もメッセージに含まれている様ですので 区切り文字が 違うだけの様にも思えますが 詳細が判らないので、当方はここまでです。 |
![]() |
投稿日時: 22/09/27 12:06:17
投稿者: Suzu
|
---|---|
引用: サイズがあるのでしょうか?ないのでしょうか? 引用: 1001 が サイズではない? では、サイズとは? 「バニラ味1本・リンゴ味1本」 これは、セット販売をしているのではないのですか? それとも、購入者が、バニラ と リンゴ をそれぞれ 1本 づつ 購入したのに、 このような表記になっているのですか? 商品名は販売者である方が決め、記載するのですよね。 その記載方法に統一性を持たせていない 販売者側の問題ではないでしょうか? セット商品でも、要素をなす商品毎の数量を把握したいと言うことでしょうか? その場合はマスターの作り方を工夫します。 ID 商品ID 商品名 要素商品ID 要素商品名 要素商品数 1 1 商品A 1 商品A 1 2 2 商品B 2 商品B 1 3 3 商品A+商品B 1 商品A 1 4 3 商品A+商品B 2 商品B 1 5 4 商品A 1本 +商品B 3本 1 商品A 1 6 4 商品A 1本 +商品B 3本 2 商品B 3 自己連結 を使う方法もありますが、そのあたりは WEB検索をしてみてください。 |
![]() |
投稿日時: 22/09/29 11:18:32
投稿者: sk
|
---|---|
引用: 引用: ならばそれぞれのサービス/ファイルフォーマットごとに データコンバートの仕組みや手順を策定すべきでしょう。 フォーマットが異なるファイルを一緒くたにして取り込んで 同一のルールに則ってデータを変換するなんてことは 基本的には無理な話です。 引用: 引用: また上記のご説明の通りなのであれば、少なくともその CSV ファイルは 一般的な EC サイトに組み込まれているファイル出力/ダウンロード機能によって 作成された受注データや決済データであるとは正直思えません。 「商品情報」というよりは「顧客との(メールやチャットなどによる)対話の記録」、 あるいは「ブラウザで開かれた EC サイトの何らかのページ(の一部分、あるいは 全てのテキスト/ HTML ソース)をそっくりそのままコピーアンドペーストしたテキスト」 であるかのように見えます。 もし上記のいずれかのケースに該当し、利用なさっている全ての EC サイトから 同様の方法によってそれらのデータを抜き取っているということなのであれば、 まずデータの抜き取り方自体に問題があるでしょう。 引用: そのように雑多な情報が入り混じった(受注や決済とは無関係の トピックを含んだ)テキストを「売れた商品の出数を算出」する上での 根拠とするのは非常に危なっかしいです。 特に「商品名の識別」に関しては Suzu さんが回答されたように、 [商品マスタ]に全ての商品に関するレコードを格納した上で 照合処理を掛けなければ、どう足掻いても人間の解釈と判断に 委ねられることになってしまいます。 |
![]() |
投稿日時: 22/09/30 14:11:31
投稿者: koppage
|
---|---|
商品マスターには「商品1」「商品1個数」「商品2」「商品2個数」「商品3」「商品3個数」といったフィールドが作成されています。
|