- ベストアンサー
2つのフィールドの文字列の組み合わせ
Access2013 vba あるテーブルの構成が以下のようになっていますが □テーブル構成 ・ID(Long) ・建物NO(外部キー/Long) ・部屋番号(文字列) この時、建物NOと部屋番号の組み合わせで、一意の値にしたい場合、どのようにしたら良いでしょうか。 よろしくお願いします。
- superwonderful
- お礼率66% (90/136)
- その他(データベース)
- 回答数1
- ありがとう数19
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
建物NOを文字列化して、数字以外で、かつ、部屋番号に使わない文字(例えばアンダーバー)を間に挟んで、部屋番号と連結して、文字列を生成する。 例: 建物NO:125、部屋番号:A301⇒125_A301 建物NO:128、部屋番号:202⇒128_202 建物NO:1282、部屋番号:02⇒1282_02 建物NO:211、部屋番号:103⇒211_103 建物NO:21、部屋番号:1103⇒21_1103
関連するQ&A
- マスターのあるレコードを削除しても(修正)
【Access 2013 vba】 テーブルのあるレコードを削除しても、そのIDを使用している別テーブルには影響を与えたくない場合、つまり、別テーブルのIDの値は消したくない場合には、どのようなリレーションシップにしたらよいでしょうか。 因みに、このテーブルの編集画面フォームAでは、3つのクエリーを作成しその最後のクエリーQ3をレコードセットとして参照しています。 以下参照 【Table1】 ・受注ID(主キー) ・日時 ・部屋ID(Ex.Key) 【Table2】 ・部屋ID(主キー) ・建物ID(Ex.Key) ・部屋の情報 【Table3】 ・建物ID(主キー) ・建物の情報 ・所有者ID(Ex.Key) 【Table4】 ・所有者ID(主キー) ・所有者の名前 <<Q1>>→Table1+Table2 <Table1> ・受注ID ・部屋ID2(外部キー)→Table2部屋の部屋ID ⇐ ※ ここが、問題のリレーションシップです。 <Table2> ・部屋ID...主キー <<Q2>>→Q1+Table3 <Q1> ・Q1のTable2の建物ID(外部キー)→Table3の建物ID <Table3> ・建物ID <<Q3>>→Q2+Table4 <Q2> ・Q2のTable3の所有者ID(外部キー)→Table4の所有者ID <Table4> ・所有者ID このようにクエリーを作成し、Q3をフォームのレコードソースとしたフォームAを使用しています。 このフォームで、<<Q1>>の※印の行のTable2から取得するIDをTable1の項目「部屋ID2」に保存していますがTable2の方にあるレコードを削除しそのIDがなくなっても、Table1には影響しないようにしたいのです。 よろしくお願いします。
- ベストアンサー
- その他(データベース)
- MySQL区切った文字列で外部結合はできない?
MySQLの外部結合について教えてください 「結合の対象となっているカラムの値が一致」は必須なのでしょうか? ■やりたいこと ・Aテーブルaカラム内にある「デリミタの先頭文字列」を抽出して、Bテーブルのidカラムと結合したい ■最終的にやりたいこと ・上記一致条件で、両テーブルデータをSELECTしたい ■試したこと ・「SELECT SUBSTRING_INDEX」で「デリミタの先頭文字列」を抽出できたのですが、そこで行き詰まりました ■質問 ・そもそもやろうとしていることが無謀なのでしょうか? ・テーブル構成を見直した方が良いのでしょうか?
- ベストアンサー
- MySQL
- 特定のフィールドを複数 Join するテーブル
SQLについて悩んでいます。 例えば personというテーブルに 個人情報があるとします。 別の service というテーブルでサービスを供給する人と 受ける人、両方を含んだテーブルを作ることは、正しい でしょうか? 例えば service テーブルで以下のような構成です。 id - int p_person - 外部キー(personテーブルのidを参照) d_person - 外部キー(personテーブルのidを参照) 僕はよくこうゆうテーブルを作りたくなりますが、 こういう考え方は正規化には反してないものの なんだかおかしいように思ってしまいます。 アドバイスなどいただけたら幸いです。
- ベストアンサー
- その他(データベース)
- エクセルVBA、列のコピーについて
VBAについて助けてほしいことがございます! VBA初心者なので、ひょっとしたらレベルの低い質問かもしれず申し訳ないのですが、VBAに詳しい方がいらっしゃれば教えて欲しいことがあります。 下記の前提を含めた作業内容をVBAのコードとしてまとめる事は出来るのでしょうか? 1列目(A1,B1,C1,D1…)にキー項目(名前、番号、地域、住所、ID…)、2列目以降にキー項目のデータが入力されています。 【作業内容】 「ID」の項目の列には、「番号」の列の文字をコピーして貼りつける(キー項目は上書きせずにIDのまま)。 【前提】 ・キー項目の列は固定されていない(B列が番号の時もあれば、住所の時もある)ので、文字を基準にコピー作業をする ・「キー項目が空欄にぶつかったら、検索を終了」という事をループに入れる(キー項目数は変動するため) ・2列目以降の全てのデータをに張り付ける」という事をコードに入れる(2列目以降のデータの列数も変動する且つ途中に空欄も含むため)
- 締切済み
- Visual Basic
- データベース:主キーが文字列の場合IDを振るべき?
テーブルの主キーが文字列の場合、 その主キーの文字列を通し番号に置き換えて、 その文字列は別テーブルに移したほうが検索が速いですか? 例えば、テーブルが CREATE TABLE spec ( test_name VARCHAR(40) NOT NULL, upper_limit NUMERIC(17,7), lower_limit NUMERIC(17,7), PRIMARY KEY(test_name) ); で、40文字という長いテスト項目名の場合、 CREATE TABLE spec ( test_id INTEGER NOT NULL, upper_limit NUMERIC(17,7), lower_limit NUMERIC(17,7), PRIMARY KEY(test_id) ); と CREATE TABLE test ( test_id INTEGER NOT NULL, test_name VARCHAR(40) NOT NULL, PRIMARY KEY(test_id) ); という二つのテーブルに分けたほうが検索は速くなりますか? (もちろん、結合する時間も含めてです。) もし速くなるとしても、文字数が3文字など少ない場合は 通し番号に置き換えてもきっと効果は薄いですよね? 何文字以上の文字列なら通し番号に置き換えたほうが速いですか? 皆さんはどのように決めていますか?
- ベストアンサー
- その他(データベース)
- 【VBA】組み合わせの計算
VBAにてランダム(適当)な値10個の中で1.5に近い組み合わせを探し、それ以外の値を隣の列に移動させたいのですが、方法がわかりません。 どなたか教えてください
- ベストアンサー
- Excel(エクセル)
- ある文字を含む列と同じ行にある列と一致の文字の除外
"名称"(D列)で*ABCD*と含まれるものと同じ行にある"番号"(B列)が一致するものを全て除外したい(D列の値は異なるが、 B列の値が一緒なものを除外したい)。 下記のコードに上記の内容のコードを加えたいのですがやり方を教えていただけないでしょうか? ちなみにVBA初心者なためお手柔らかにお願い致します。 Sub 分別() Dim j As Long j = Cells(Rows.Count, 1).End(xlUp).Row With Range(Cells(3, 1), Cells(j, 43)) .AutoFilter Field:=37, Criteria1:="EFGK" .AutoFilter Field:=4, Criteria1:="*FF0001*", Operator:=xlOr, Criteria2:="*DD0002*" End With End Sub
- 締切済み
- Visual Basic
- Select Distinct の使い方
【Access 2013 VBA / SQL】 [親Table] *ID1 *日付 *受注元会社名 {子Table ] *ID2(主キー) *ID1(親テーブルのID) *ID3(外部キー) [Table B] *ID3 *会社名 ------------------------------ ID2 ID1 会社ID ------------------------------ 1 1 A 2 1 B 3 1 B 4 1 C 5 2 B 6 2 A 7 2 A ------------------------------ ID1=1のもので、会社IDを一意にして選択した会社名を表示したい この時、SQLでどのように書けばよいでしょうか
- ベストアンサー
- その他(データベース)
- Accessでフィールド名を変数(文字列)で・・・
以下のようなテーブルがあります ID 回答1 回答2 1 A D 2 C A 3 B B VBAで回答1と回答2のデータを得ようとした場合 Me!回答1 とするのですがこれを変数(文字列で)行う場合どうしたらよいでしょうか? イメージとしては以下のようにしたいのですが・・ Dim str as String str = "回答1" Me!str
- ベストアンサー
- オフィス系ソフト
- 再投稿:フィールドの値をテーブル名&フィールド名にして参照したい
すみません。若干記入ミスだったので再投稿します。 こちらにご解答お願いします。 TABLE_a ・Ta_id ・key_table ・key_field ・key_no TABLE_b ・Tb_id ・Tb_name TABLE_c ・Tc_id ・Tc_name と3つのテーブルがあり、 key_tableに「TABLE_b」、key_fieldに「Tb_id」が入ってて、 TABLE_aとTABLE_bを select の left join して抽出したい場合、 どういうSQL文になるのでしょうか。 select * from TABLE_a left join case key_table when 'TABLE_b' then 'TABLE_b' when 'TABLE_c' then 'TABLE_c' end on 'TABLE_a.key_field'.key_no = case key_table when 'TABLE_b' then ''TABLE_a.key_table'.Tb_id' when 'TABLE_c' then ''TABLE_a.key_table'.Tc_id' end ; とやってみたのですが、うまくできませんでした。 ご教示お願いします。
- 締切済み
- SQL Server
お礼
ありがとうございました。 間に何か記号を入れるのが味噌ですね。