アンケート結果を抽出するSQL文について
- SQLの抽出方法について質問です。会員テーブルと果物と色の好みを管理するテーブルがあり、抽出条件も複数選択できる場合、効率的なSQLを作成する方法を知りたいです。
- テーブル【MEMBER】と【MEMBER_FRUIT】、【MEMBER_COLOR】で会員の果物と色の好みを管理しています。抽出条件を管理するテーブル【SEARCH】と【SEARCH_DETAIL】もあります。ループ処理ではなく、より効率的なSQLを教えてください。
- テーブル【MEMBER】と【MEMBER_FRUIT】、【MEMBER_COLOR】で会員の果物と色の好みを管理しており、【SEARCH】と【SEARCH_DETAIL】で抽出条件を管理しています。アンケートの数だけSQLを追加する方法ではなく、効率的なSQLを教えてください。
- ベストアンサー
アンケート結果を抽出するSQL文について
SQLの抽出方法について質問です。 【会員】テーブル関連 すきなフルーツを複数選択できます。 テーブル【MEMBER】と【MEMBER_FRUIT】2つのテーブルで管理 例: Aさんは「りんご」「みかん」「スイカ」がすきです。 Bさんは「りんご」「メロン」がすきです。 Cさんは「みかん」「スイカ」がすきです。 同様に「好きな色」もテーブルで管理しています。 実際はこのような管理テーブルがアンケートの数だけあります。 テーブル【MEMBER】 ID、MEMBER_CD、MEMBER_NAME 1 10 Aさん 2 20 Bさん 3 30 Cさん ・ ・ テーブル【MEMBER_FRUIT】 ID、MEMBER_CD、FRUIT_CD 1 10 1 2 10 2 3 10 3 4 20 1 5 20 4 6 30 2 7 30 3 ・ ・ テーブル【MEMBER_COLOR】 ID、MEMBER_CD、COLOR_CD 1 10 1 2 10 2 3 10 3 4 20 1 5 20 4 6 30 2 7 30 3 ・ ・ テーブル【FRUIT】 ID、ITEM 1 りんご 2 みかん 3 スイカ 4 メロン テーブル【COLOR】 ID、ITEM 1 赤 2 黄 3 青 4 白 【抽出条件】関連 条件も複数選択できます。 テーブル【SEARCH】と【SEARCH_DETAIL】2つのテーブルで管理 ※会員を抽出条件を管理するテーブル テーブル【SEARCH】 ID、TITLE 1 「りんご」または「メロン」または「赤」または「白」がすきな人 2 「スイカ」または「青」がすきな人 ・ ・ テーブル【SEARCH_DETAIL】 SEARCH_ID、FRUIT_CD 1 1 1 4 2 3 テーブル【SEARCH_COLOR】 SEARCH_ID、COLOR_CD 1 1 1 4 2 3 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 【SEARCH】のID1の出力結果イメージ MEMBER_CD、MEMBER_NAME 10 Aさん 20 Bさん こんなSQLを作成してみました。 【SEARCH】テーブルをループで1件づつ処理しようと考えています。 他にもっと効率がいいSQLがありますか? よろしくお願いします。 ※SEARCH_IDをどこかで指定しないと... SELECT DISTINCT MEMBER.MEMBER_CD, MEMBER_NAME FROM MEMBER,MEMBER_FRUIT,MEMBER_COLOR WHERE MEMBER.MEMBER_CD = MEMBER_FRUIT.MEMBER_CD AND MEMBER_FRUIT.FRUIT_CD ******************************** in ( SELECT FRUIT_CD FROM SEARCH,SEARCH_DETAIL WHERE SEARCH.ID = SEARCH_DETAIL.SEARCH_ID ) ********************************** AND MEMBER_COLOR.COLOR_CD in( SELECT COLOR_CD FROM SEARCH,SEARCH_COLOR WHERE SEARCH.ID = SEARCH_COLOR.SEARCH_ID ) ***の部分をアンケートの数だけ追加すればいいと 考えていますが... みなさんはこういう場合、どのように対応してますか?
- pos_pos
- お礼率17% (7/39)
- その他(プログラミング・開発)
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
先に提示したテーブルは基本情報です 会員が選択した情報が無いのですが、どうでしょうか? 回答テーブル 会員ID アンケートID 選択枝ID これで、回答テーブルと、会員テーブル、アンケートテーブル、アンケート選択枝テーブルをリレーションすればよいです なお、メリットは?ということですが 新たな質問が出た時に、いちいちテーブルを作成する必要がなく テーブルにデータを格納すればOKです
その他の回答 (1)
- gau_puzzler
- ベストアンサー率48% (39/81)
アンケートの種類だけテーブルを作成するという考えが間違っていると思います (非常に面倒くさくないですか?) 会員テーブル ID 氏名 1 斎藤 2 佐藤 3 田中 アンケートテーブル ID アンケート内容 1 好きなくだものは 2 好きな色は アンケート選択枝テーブル ID 選択名 1 リンゴ 2 みかん 3 メロン 4 白 5 赤 アンケート質問選択枝テーブル アンケートID 選択枝ID 1 1 1 2 1 3 2 4 2 5 はい、このテーブルで考えてみて下さい
関連するQ&A
- SQL文について
SQLの抽出方法について質問です。 【会員】テーブル関連 すきなフルーツを複数選択できます。 テーブル【MEMBER】と【MEMBER_FRUIT】2つのテーブルで管理 例: Aさんは「りんご」「みかん」「スイカ」がすきです。 Bさんは「りんご」「メロン」がすきです。 Cさんは「みかん」「スイカ」がすきです。 テーブル【MEMBER】 ID、MEMBER_CD、MEMBER_NAME 1 10 Aさん 2 20 Bさん 3 30 Cさん ・ ・ テーブル【MEMBER_FRUIT】 ID、MEMBER_CD、FRUIT_CD 1 10 1 2 10 2 3 10 3 4 20 1 5 20 4 6 30 2 7 30 3 ・ ・ テーブル【FRUIT】 ID、ITEM 1 りんご 2 みかん 3 スイカ 4 メロン 【抽出条件】関連 条件も複数選択できます。 テーブル【SEARCH】と【SEARCH_DETAIL】2つのテーブルで管理 ※会員を抽出条件を管理するテーブル テーブル【SEARCH】 ID、TITLE 1 「りんご」または「メロン」がすきな人 2 「スイカ」がすきな人 ・ ・ テーブル【SEARCH_DETAIL】 SEARCH_ID、FRUIT_CD 1 1 1 4 2 3 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 【SEARCH】のID1の出力結果イメージ MEMBER_CD、MEMBER_NAME 10 Aさん 20 Bさん こんなSQLを作成してみました。 【SEARCH】テーブルをループで1件づつ処理しようと考えています。 他にもっと効率がいいSQLがありますか? よろしくお願いします。 SELECT DISTINCT MEMBER.MEMBER_CD, MEMBER_NAME FROM MEMBER,MEMBER_FRUIT WHERE MEMBER.MEMBER_CD = MEMBER_FRUIT.MEMBER_CD AND MEMBER_FRUIT.FRUIT_CD in ( SELECT FRUIT_CD FROM SEARCH,SEARCH_DETAIL WHERE SEARCH.ID = SEARCH_DETAIL.SEARCH_ID )
- ベストアンサー
- その他(プログラミング・開発)
- mysqlのSQL文の書き方について
mysqlでA,Bのテーブルがあるとします。 A ID1 りんご ID3 みかん ID4 ぶどう B ID2 メロン ID3 みかん ID4 ぶどう この二枚のテーブルでどちらかのテーブルに存在すればヒットする ようなselec文はどう書いたらいいのでしょうか。重複する行は、 一行のみ抜き出したいです。 こういうかんじにです。 ID1 りんご ID2 メロン ID3 みかん ID4 ぶどう よろしくお願いします。
- ベストアンサー
- その他(データベース)
- 行数をカウントするSQLにつきまして
行数をカウントするSQLにつきまして いつもお世話になっております。 下記の売上テーブルから りんご=3(行) みかん=2(行) メロン=1(行) というようなデータを抽出するSQLはどのように記述したら良いのでしょうか? ・・・・売上テーブル・・・ 売上番号 品名 単価 1 りんご 100 2 りんご 100 3 りんご 100 4 みかん 150 5 みかん 150 6 メロン 250
- ベストアンサー
- その他(データベース)
- 行数をカウントするSQLにつきまして
行数をカウントするSQLにつきまして いつもお世話になっております。 下記の売上テーブルから みかん=3(行目) というようなデータを抽出するSQLはどのように記述したら良いのでしょうか? ・・・・売上テーブル・・・ 売上番号 品名 単価 101 りんご 100 102 りんご 100 103 みかん 150 104 りんご 100 105 みかん 150 106 メロン 250 postgre8.3のためrow_numberが使えません
- 締切済み
- PostgreSQL
- VB.NETでSQLを作る時のカンマの対処
こんにちは。 タイトルの通りなのですが、VB.NETでSQL文を作りたいのですが、カンマの対処について分からなかったので質問させて頂きました。 例えば、下記のようなテーブルとwindowsアプリケーションフォームがあったとします。 itemテーブル フォーム(□はチェックボックスだと思ってください。) item_id item_cd item_name □ りんご --------------------------------- □ ばなな 0001 0001 りんご □ みかん 0002 0002 ばなな □ めろん 0003 0003 みかん 0004 0004 めろん このフォームで、チェックボックスに印が付いているものを、SQL文の条件に加えたいと思っていますが、なかなか上手く書けません。 現在のソース sql="SELECT item_id,item_cd,item_name " _ & "FROM item " _ & "WHERE item_name IN (" If apple.checked = True Then sql &= "'" & label1.text & "'," End If If banana.checked = True Then sql &= "'" & label2.text & "'," End If ・ ・ ・ このやり方だと、sql文の最後にカンマが残ってしまいます。 ですが、前カンマをやったところで構文的におかしくなってしまいます。 このようなとき、どのように対処すればよいのでしょうか? よろしければ、教えてください。
- ベストアンサー
- Visual Basic
- SQL WHERE文のノットイコールについて
初歩的な質問ですみません。 Oracle9iでsqlplusで接続しています。 「member_accountテーブルのdelete_flag(VARCHAR2)カラムの値が'1'ではない」ものを抽出したいと考えてます。 ただ、正しい結果が返ってきません。 何が問題でしょうか?よろしくお願いいたします。 ============================================================ SQL> select count(ID) from member_account; COUNT(ID) ---------- 16450 SQL> SQL> select count(ID) from member_account where delete_flag='1'; COUNT(ID) ---------- 107 SQL> SQL> select count(ID) from member_account where delete_flag<>'1'; COUNT(ID) ---------- 0 SQL> SQL> select count(ID) from member_account where delete_flag!='1'; COUNT(ID) ---------- 0 ============================================================ よろしくお願いいたします。
- ベストアンサー
- Oracle
- SQL文について教えてください。
お世話になります。 テーブルを3つ作りました ユーザーテーブル:USER_MS USE_NO USER_NAME 001 太郎 002 次郎 003 三郎 品名テーブル:HINMEI_MS HINMEI_NO HINMEI_NAME 001 りんご 002 みかん 003 イチゴ 嫌いなものテーブル:KIRAI_TR KIRAI_NO USER_NO HINMEI_NO 001001 001 001 002003 002 003 002001 002 001 ※KIRAI_NO=USER_NO.HINMEI_NO と連結してプライマリーキーにした ここで、次郎の嫌いなものを抽出するときには $USER_NO = '002'; $SQL ="SELECT * FROM KITAI_TR A,HINMEI_MS B WHERE A.USER_NO = '$USER_NO'; で抽出できるのですが、 次郎の嫌いでない002みかんだけを抽出するSQL文がわからず苦慮しています。 以前、オラクルでSQLを使ったことがあったのですが、その時はFROM句の後に(SELECT * FORM・・・・) Bなどと書くと通ったのですがMYSQLでは通りませんでした。 よろしくお願いします。
- ベストアンサー
- MySQL
- SQL文の書き方について
SQLServer2005で、次のような品物の単価の履歴を表すテーブルを作りました。「,」は列の区切りです。 ID,Sort,Name,Price,Effective,Time 1,1,りんご,100,True,2009/4/1 2,3,なし,120,True,2009/4/1 3,2,ぶどう,150,True,2009/4/1 4,4,ばなな,80,True,2009/4/1 5,1,りんご,110,True,2009/4/20 6,3,なし,100,True,2009/4/20 7,3,なし,90,True,2009/4/25 8,4,ばなな,False,2009/4/25 このテーブルから、Effectiveが、Trueで、最新の単価をSort順に抽出するSQL文が判りません。 SELECT * FORM テーブル名 WHERE (Effective=1) ORDER BY Sort に、何を加えれば実現可能でしょうか? どなたか?詳しい方がいらっしゃいましたら、教えてください。 SQL文の初心者なので、簡単なことなんでしょうが、よろしくお願いいたします。入門書を読めば読むほど、こんがらかって、困っております。なお、Sortの部分は、正規表現的に問題があるので、見直そうと考えています。
- ベストアンサー
- SQL Server
- SQLの書き方を教えてください。
初めまして。sql初心者です。OracleのSQLについて質問があります。 「update Aテーブル set Aテーブル.構成順 = (select Bテーブル.順番 from Bテーブル where Aテーブル.ID = Bテーブル.ID and Aテーブル.種類 = Bテーブル.種類CD)」 こういった内容のSQLって発行できるんでしょうか。 Bテーブル.種類CDの"種類CD"で「コンポーネント"種類CD"を宣言してください」というエラーになります。 書き方が分かりません。。 すいませんが教えていただきたく思います。 よろしくお願いいたします。
- 締切済み
- Oracle
- このSQL文の意味を教えてください。
SQL勉強中の者です。このSQL文の意味を教えてください。 SELECT A.* FROM table AS A, table AS B WHERE A.id *= B.id AND A.flag = 1 tableにAとBという別名をつけて、Aの全ての項目を抽出しているというところまでは分かりました。 分からないのは「WHERE A.id *= B.id」の部分です。ただの「=」なら分かりますが「*=」って何ですか? あと、AとBのテーブルが同じなのですが、同じテーブルを2つ並べている意味がよく分かりません。 よろしくお願いします。
- ベストアンサー
- その他(データベース)
補足
ご指導ありがとうございます。 >アンケートの種類だけテーブルを作成するという考えが間違っていると思います そうですか... アンケートの件数は3,4件と考えています。 SELECT A.ID,A.氏名 FROM 会員テーブル AS A,アンケート質問選択枝テーブル AS B WHERE B.アンケートID=1 このテーブル構成でSELECT文作成がよくわかりません。 すみません。このテーブル構成だとどのようなメリットが あるのでしょうか?