- 締切済み
テーブルの結合と主キー(1,2,3・・という連番)の追加について
アクセス初心者です。 よろしくお願いします。 今テーブル1には 列1 列2 列3 旅館 高 みかん ホテル りんご 民宿 中 なし というデータがあり、 テーブル2には 列1 列2 えび さけ いくら 卵 鳥 というデータがあったとして、 この二つをただ単純に 列1 列2 列3 列4 列5 旅館 高 みかん えび さけ ホテル りんご いくら 民宿 中 なし 卵 鳥 というように横にくっつけたいのですが それができません。 また、テーブル1,2とも主キーがないため1,2,3、という連番を振りたいのですが、これがエクセルのように簡単にはできないのです。 経験者の方には簡単かもしれませんが、いろいろ調べてもわかりませんでした。 仕事で使うことですので、申し訳ないのですが、教えていただけないでしょうか。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- DexMachina
- ベストアンサー率73% (1287/1744)
No.3です。 > #3を面白いと思って ありがとうございます(笑) > 連番を振る前に当該フィールドをすべて Null にしなければならない これについては、更新クエリで対応するのがよろしいかと。 > 10万件もあると、 頑張って下さい(笑) まあ、あくまで急場しのぎの方法でしょうからね、これは。 ちなみにこの方法、2番目に「3」を入れると「1,3,5,7・・・」という形で連番が入っていきますので、参考までに。
#3を面白いと思って暇つぶしに試してみました。マイクロソフトらしい。 >3)下向きカーソルキー(「↓」)を押して2番目のレコードに移動し(決して行き過ぎないこと)、「2」を入力 >4)下向きカーソルキーを長押し クエリからデータシートビューに切り替えると、望んだ順番で連番がふれるんですね。 欠点としては、連番を振る前に当該フィールドをすべて Null にしなければならないことと、スピードが極端に遅いことでしょうか。10万件もあると、キーの上に重しをのせてどこかで待機するのかな(^^;
- DexMachina
- ベストアンサー率73% (1287/1744)
連番のつけ方: 1)連番を割り当てたいテーブルに「数値型」のフィールド(例えば「ID」と命名)を新設して保存 2)データシートビューに切り替え、先頭レコードの「ID」に「1」を入力 ※この際、決してEnterなどで他のフィールドに移動しないこと 3)下向きカーソルキー(「↓」)を押して2番目のレコードに移動し(決して行き過ぎないこと)、「2」を入力 4)下向きカーソルキーを長押し これで、カーソル移動したレコードに順番に数字が入力されていきます。 ・・・かなり邪道な方法です(笑)
データベースを使用するならば「データベース的感覚」を身に着けましょう。色々ありそうですが、取り敢えず三つ 1.主キーは必ず付ける 主キーがないとリレーションが曖昧になったり、ADO接続で更新が出来なかったり、問題が多いです。使わなくても弊害となるのはディスクスペースを僅か余計に使うだけです。テーブル設計時に主キーを付けないと警告が出ますが、これはマイクロソフトに多い「余計なお世話」とはちょっと違うようです 2.データベースは並び順を保証しない アクセスはユーザーが最後に指定した並び順を記憶するようですが、一般的に並び順は保証されません。クエリで明示的に並び順を指定しましょう 3.データベースはテーブルをまたぐ関係に関知しない 並び順が保証されないので、「横並び関係」も保証されません。テーブル間の横並びは SELECT Aテーブル.*, Bテーブル.* FROM Aテーブル INNER JOIN Bテーブル ON Aテーブル.KEY1 = Bテーブル.KEY1; のようにクエリで指定しましょう(SQL文で書きましたが、実際にはクエリのデザインビューからマウスによる指定でよいでしょう)。 このような感覚になじまないならば、データベースよりもエクセルなどを使用した方が快適で能率良く仕事が出来るでしょう。 連番に関して、オートナンバー型使用による解決は「理論上あり」ですが、実用上は問題が多すぎて?です。 長くなるので、「もっと知りたい」という補足があればまた書きます。
- PCFREAK
- ベストアンサー率51% (417/805)
テーブルの定義を変えて良いなら、列を追加してオートナンバー型にしてやればOKです。 主キーが存在しない、上記説明のテーブル1,2を単純に結合するのは、そのままでは一筋縄では行きませんね。 それぞれのテーブルの参照クエリーを作成してやり、そのクエリーでオートナンバー型の列を用意してやれば仮想的に主キーが振られますから、そのクエリー同士で結合してやる、という方法しか思い付きません。