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

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

SQlite3で外部結合したい

閲覧ありがとうございます。 2個以上のテーブルで外部接続する方法が判らず 投稿しました。 DATA1 ----------------------- 店名     カテゴリ1  カテゴリ2 大将     ラーメン   餃子 トレビアン  パスタ    ケーキ ジャンル ----------------- カテゴリ  大分類 ラーメン  中華 餃子    中華 パスタ   イタリアン ケーキ   スイーツ お店の 「名前」・「カテゴリ」 が入っているテーブルに、 「ジャンル」をくっつけたいと思っています。 期待している結果は以下のようなものです。 DATA1 ----------------------- 店名     カテゴリ1  カテゴリ2  大分類1   大分類2 大将     ラーメン   餃子     中華     中華 トレビアン  パスタ    ケーキ    イタリアン  スイーツ 以下のように書いてみましたが、上手くいきませんでした。 どのようにSQL文を書けばいいのか、いまいち判りません。 初歩的な事かもしれませんが、よろしくお願いします。 select * FROM DATA LEFT JOIN ジャンル ON (カテゴリ1=カテゴリ) LEFT JOIN ジャンル ON (カテゴリ2=カテゴリ)

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

  • ベストアンサー
  • 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

  • 男はカレーラーメン牛丼、野菜食べないという考え

    会社の昼休みにラーメン屋に行ったら職場の他部署の課長や先輩、同期に会い一緒に食べることになりました。 そこでサラダセットを頼んだところ、 「え?男でサラダ頼んでる人初めて見た」 「てか女子?」 などと言われました。 男が野菜を食べるのがそんなに珍しいのでしょうか? 別の課長に「男なんてカレーかラーメンでいいんだよ」と言われたこともあります。 なぜ、男はカレー、ラーメン、餃子定食で、女は野菜の入ったパスタなりスープ、あるいはスイーツやカフェ等といった住み分けがあるんでしょうか? 男がパスタを食べてはいけないのですか?私はたまに一人で五右衛門とか行くこともありますけど。さすがにスイーツまではいかない、というかそこは興味がないです。 男はラーメン二郎とかあまり綺麗でない店で油っこくて炭水化物ばかりの食事でよくて、女は綺麗な店で、というのはどうしても納得がいきません。 ご意見お待ちしています。

  • 映画の中のイタリア料理

    映画のジャンルや国籍は気にしないのですが、イタリア料理(特にパスタ)を食べるシーンが出てくる映画を探しています。 例えば「この映画のなかで誰々がトマトソースのパスタを食べているシーンがあるよ」 といった感じで教えてもらいたいです。 最近のハリウッド映画では中華や日本料理を食べているシーンはよく見かけるのですが、イタリアンってないなと思います。 新旧は問いません。 よろしくお願いします。

  • いろんなグルメで最も評価が高い店を探したい

    ラーメン、寿司、中華、パン、ケーキなど、いろいろなジャンルのグルメが ありますが、おいしいお店や有名店に行ってみたいと思っているのですが、 探すにはやはりインターネットでそういったランキングサイトを 見るのが一番参考になるでしょうか?

  • 都内の町中華の店名が思い出せません

    一年位前に都内の町中華に行ったのですが、店名が思いません。 確かチャーハンが800円程で餃子が8個で600円程、ラーメンや天津飯などもありましたが割と高めの設定だった気がします。 行ったのは夕方18時過ぎくらいで店内はあまり混んでいませんでした。 店員さんは若い人はおらず、50代くらいのおばさま数人でした。 ヒントが少なくて申し訳ないですが、ここではないかという情報があったらお願いします。

  • 高級レストランでの注文品数について。

    高級ホテルや格が高いレストランでのメニューの注文についての質問です。 特にイタリアンと中華の場合ですが、 私のある友人はホテルのレストランに行く度に、 イタリアンならふたりでパスタを1品ずつ、 中華なら同じ焼きそばを1品ずつと餃子(つまりふたりで3品) しか頼みません。 ランチタイムならそれでもいいと思うのですが、 ディナータイムですと、 周囲のお客さんは皆フルコースを盛大に頼んでいます。 1品ずつしか頼んでいないのは私達しかいないので、 その友人には 「ディナータイムだからもっと頼まないと恥ずかしい」 と言ったことがあるのですが、 「堂々としてれば関係ない」 と言ってます。 その友人と一緒の時には ドリンクも頼まず、水を飲んでいます。 お店のスタッフからはなんとなくいつも内心笑われているような 気がしてならないのですが、 どうでしょうか? (特に帝国ホテルやロイヤルホテルのイタリアンや中華では そのように感じます) ちなみに、その友人は40台の男性です。 経験豊富な方、もしくは業界の方の意見をよろしくお願いします!

  • 3つ以上のテーブルを結合して絞り込むには?

    MySQL勉強中のものです。 初歩的な質問ですいませんが、 以下のような3つのテーブルがあります。 テーブルA(店名) A店 B店 C店 D店 テーブルB(販売品目) パソコン ビデオ 冷蔵庫 液晶テレビ デジカメ テーブルC(支払い方法) クレジットカード 銀行振り込み 代引き このデータから、テレビとビデオを販売していて かつクレジットカードに対応しているお店を検索したいと思うのですが、 どうもうまくいきません。 この場合、どのようにSQL文を組み立てればよいのでしょうか。 LEFT JOINで1つに結合すると、カラムごとにレコードが重複して GROUP BYでうまく絞り込めません。 そもそもテーブルの作り方を間違えているのでしょうか。 考え方のヒントだけでも結構ですのでよろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • カテゴリのDB設計について

    お世話になります。 商品データとカテゴリテーブルをそれぞれ分けたデータベースを作っており、JOINで該当カテゴリ名を抽出しています。 しかし商品によって複数のカテゴリに属する(カンマ区切りで「1,2,3」というように現状格納しています)場合、それらのすべてを拾ってくることは可能でしょうか? またカテゴリひとつひとつに対して商品データ内にカラムを用意するべきでしょうか? select `shop`.no, left outer join list_category on `shop`.category=`list_category`.no (現状) どうぞよろしくお願い致します。

    • ベストアンサー
    • MySQL
  • 料理のジャンル

    自己紹介文を作成していて迷っているのですが、 日本料理、中華料理、イタリア料理。。。 あるいはエスニック料理、アジア料理。。。といった分類でも構わないのですが、料理のジャンル(種類、カテゴリー)という時の「ジャンル」に当たる英単語は何ですか?

  • にんにくの多い料理と対処法

    先日イタリアンレストランでペスカトーレを注文し食べました。家に帰ってしばらくしたらにんにく臭いと言われてしまいました。ペペロンチーノとかオイル系のパスタはにんにくが多いのでいつも食べないようにしていたのですが、トマトソース系でもそうだったことに気づきました。 私はにんにくは嫌いじゃないのですが、朝の電車の中ですさまじい匂いをさせる方が隣に座ったりすると嫌なので、自分がそうなりたくないがためにできるだけ食べません。 日頃気をつけているのは、餃子とラーメン(店による)、スペイン料理ですが、今回トマト系のパスタも同様だということがわかりました。 このほかの料理で意外ににんにくが多用されている料理などがありましたら教えてください。 あともう一つ、今回のようににんにくの強い料理を食べてしまった後、どうしたらよいでしょう。食べた直後よりも数時間、あるいは半日たったあたりが一番臭くなると思うのですが。ブレスケアのようなもので完全に消えるのでしょうか?

  • このSQL文を教えてください。

    Windows2000(SP3) SQLServer2000(SP3) で開発しています。 テーブルA 項目No,大分類コード,中分類コード,詳細コード,日付,内容 テーブルB 大分類コード,中分類コード,詳細コード,新_詳細コード,内容 TableA,Bでは大分類コード,中分類コード,詳細コードがリンクする このような状況で、TableA,Bを下記のようにjoinして、  TableA.大分類コード,   TableA.中分類コード,  TableB.新_詳細コード, が重複するデータを取得する場合のSQL文を教えてください。 (join) SELECT  TableA.*,  TableB.* FROM  TableA LEFT OUTER JOIN  TableB ON  TableA.大分類コード=TableB.大分類コード  AND  TableA.中分類コード=TableB.中分類コード  AND  TableA.詳細コード=TableB.詳細コード よろしくお願いします。