• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQlite3で外部結合したい)

SQlite3で外部結合する方法とは?

このQ&Aのポイント
  • SQlite3で複数のテーブルを外部結合する方法について詳しく教えてください。
  • テーブルの結合方法を知りたいです。特に、データ1テーブルとジャンルテーブルを結合する方法が知りたいです。
  • 質問者はSQlite3でデータ1テーブルとジャンルテーブルを結合する方法について困っているようです。詳しい解説をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.2

>実は、ジャンルのテーブルを「ジャンル1」「ジャンル2」と二つ用意する >方法は一度ためして、それ以外の方法がないかと悩んでいました。 > >今、DATA1の中に「カテゴリ1」から「カテゴリ5」まであり、 >これでは同じ内容のテーブルが5個になってしまうので、 ちょっと勘違いされているようです。 私の回答は、「別名を付けているだけ」であり、ジャンルのテーブル自体は「1つのまま」です。 ジャンルテーブルを2つ(5つ)作る必要はありません。 大事な事なので2回書きますw 私の書き方で必要なテーブルは 「DATA1とジャンルの2テーブル」だけです。 「DATA1とジャンル1とジャンル2の3テーブル」ではありません。 つまり「同じテーブルを別のテーブルとして扱っている」だけです。 そうではなく、単純に 「LEFT JOINを何度も書くのは煩雑なので単純にできないか」 と言う事でしたら、「できません」。 そもそも、ジャンル1~ジャンル<n>、と言う風に、横に繰り返し列を持つのは正規化上、好ましくないんです。 (まあ、5つくらいが限度でしょう) これが何10とあるなら、DATA1とカテゴリのリレーションを持つ中間テーブルを作るべきでしょうね。 データの正規化については、ご自分で調べてくださいね。

ryou_nya
質問者

お礼

データーの正規化、中間テーブルのキーワードで色々調べてみました。 おっしゃるとおり、設計を見直すほうがいいですね。 多対多の問題点に、現在思いっきり該当しています。 正規化にしたがってDBを作りかえる事にしました。 すでに、このQAのタイトルと内容がズレていますが 他の方がQ&A参照したときに、参考になるように リンクを張っておきます。 多対多のデータの問題点 http://oshiete.goo.ne.jp/qa/3738694.html データの正規化 http://gihyo.jp/dev/feature/01/database/0003?page=1 自分の場合、設計の都合で、カテゴリー5個まで と現実側に制限がかかっていました。 今回は、勘違い気味な質問にまで付き合ってくださって ありがとうございました。

ryou_nya
質問者

補足

同じテーブルを複数回参照する事もうまくできました。 いろいろとありがとうございました。

その他の回答 (1)

  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.1

ジャンルから取得したい情報は、DATA1上にある、カテゴリ1とカテゴリ2で、2種類(キーは別)なのだから、「この2つのジャンルは別物である」と言う事をDBエンジンにわからせる必要があります。 つまり、「カテゴリ1用のジャンル」と「カテゴリ2用のジャンル」と言う風に書くんです。 そのためには以下のように、別名(エイリアス)を付けてください。 SELECT d.店名, d.カテゴリ1, d.カテゴリ2, g1.大分類 大分類1, g2.大分類 大分類2 FROM DATA1 d LEFT JOIN ジャンル g1 ON d.カテゴリ1 = g1.カテゴリ LEFT JOIN ジャンル g2 ON d.カテゴリ2 = g2.カテゴリ SQlite3なのでおそらくLinuxか、iOSか、Androidの話かと思われますが、今手元に環境がないので、FireFoxプラグインのSQLite Manager(Windows)で確認しました。

ryou_nya
質問者

補足

回答ありがとうございます。 質問が悪かったみたいで、質問の補足です。 実は、ジャンルのテーブルを「ジャンル1」「ジャンル2」と二つ用意する 方法は一度ためして、それ以外の方法がないかと悩んでいました。 今、DATA1の中に「カテゴリ1」から「カテゴリ5」まであり、 これでは同じ内容のテーブルが5個になってしまうので、 「ジャンル」のテーブルをなんとか1つ済ます回避策等があれば と思って質問させていただきました。 もしかしたら機能的に無理な事を聞いているかもしれません。 無理な場合は無理と言っていただける形でも助かります。 たびたび済みませんがよろしくお願いします。

関連するQ&A