効率的なSQL文の作成方法について
- SQLの抽出方法について質問があります。会員テーブルとフルーツテーブルを関連付けて、特定の条件に基づいて会員を抽出するためのSQL文を作成しています。しかし、もっと効率的な方法があるかどうか知りたいです。
- 会員テーブルとフルーツテーブルを関連付けて、特定の条件に基づいて会員を抽出するためのSQL文を作成しています。しかし、もっと効率的な方法があるかどうか知りたいです。より高速な実行を実現するために、適切な結合方法やクエリの最適化方法について教えてください。
- 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 ・ ・ テーブル【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 )
- pos_pos
- お礼率17% (7/39)
- その他(プログラミング・開発)
- 回答数1
- ありがとう数0
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
データベースが何か分からないのでAccessで。 SELECT DISTINCT M.MEMBER_CD, M.MEMBER_NAME FROM SEARCH_DETAIL AS SD LEFT JOIN (MEMBER_FRUIT AS MF LEFT JOIN MEMBER AS M ON MF.MEMBER_CD = M.MEMBER_CD) ON SD.FRUIT_CD = MF.FRUIT_CD WHERE SD.SEARCH_ID=1; SEARCHテーブルを結合する必要はなし。 あと蛇足ですが、MEMBERテーブルのID列の存在意義がわかりません。
関連する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 ・ ・ テーブル【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 ) ***の部分をアンケートの数だけ追加すればいいと 考えていますが... みなさんはこういう場合、どのように対応してますか?
- ベストアンサー
- その他(プログラミング・開発)
- 行数をカウントするSQLにつきまして
行数をカウントするSQLにつきまして いつもお世話になっております。 下記の売上テーブルから りんご=3(行) みかん=2(行) メロン=1(行) というようなデータを抽出するSQLはどのように記述したら良いのでしょうか? ・・・・売上テーブル・・・ 売上番号 品名 単価 1 りんご 100 2 りんご 100 3 りんご 100 4 みかん 150 5 みかん 150 6 メロン 250
- ベストアンサー
- その他(データベース)
- mysqlのSQL文の書き方について
mysqlでA,Bのテーブルがあるとします。 A ID1 りんご ID3 みかん ID4 ぶどう B ID2 メロン ID3 みかん ID4 ぶどう この二枚のテーブルでどちらかのテーブルに存在すればヒットする ようなselec文はどう書いたらいいのでしょうか。重複する行は、 一行のみ抜き出したいです。 こういうかんじにです。 ID1 りんご ID2 メロン ID3 みかん ID4 ぶどう よろしくお願いします。
- ベストアンサー
- その他(データベース)
- 行数をカウントするSQLにつきまして
行数をカウントするSQLにつきまして いつもお世話になっております。 下記の売上テーブルから みかん=3(行目) というようなデータを抽出するSQLはどのように記述したら良いのでしょうか? ・・・・売上テーブル・・・ 売上番号 品名 単価 101 りんご 100 102 りんご 100 103 みかん 150 104 りんご 100 105 みかん 150 106 メロン 250 postgre8.3のためrow_numberが使えません
- 締切済み
- PostgreSQL
- 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
- 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
- PHP SQL 問合せについて
SQLについて質問いたします。SQL 全般でも結構です。 No,name 1,ばなな 2,りんご 3,ばなな 4,みかん 5,ばなな 6,りんご 上記テーブルで 1,ばなな 3,ばなな 5,ばなな 2,りんご 6,りんご 4,みかん の結果を得るSQLはどのように記述すればよいでしょうか?
- ベストアンサー
- その他(データベース)
- 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文を教えてください
以下のようなテーブルがあります。 IDとnameは複合ユニークキーとなっています。 ID | name 1 | foo 2 | foo 1 | bar 3 | foo 2 | hoge 3 | bar このテーブルから、nameにfooとbar両方を持つIDを抜き出すSQL文が分からずに困っています。 つまり、fooとbarで検索するとID 1とID 3が、fooとhogeで検索するとID 2がヒットするようなSQL文を知りたいのです。 初歩的な質問なのかもしれませんが、どうしてもSQL文が思いつかず大変困っています。 どうぞよろしくお願いします。
- ベストアンサー
- MySQL
- JOINを使ったSQL文を作成しようとしています。
JOINを使ったSQL文を作成しようとしています。 以下の様な3つのテーブルがある場合のSQL文を教えて下さい ※勉強の為、適当なテーブルを作成しましたが、やりたい事は JOINの中に更にJOINさせたSQL文を作成したいと思ってます 表A USER_ID(プライマリキー) NAME 表B USER_ID(プライマリキー) ※表A.USER_IDと紐着く BUMON(プライマリキー) TERM(プライマリキー) 表C BUMON(プライマリキー) ※表B.BUMONと紐着く TERM(プライマリキー) ※表B.TERMと紐着く MEMBER 【取得したい項目】 表A.USER_ID 【抽出条件】 表CのMEMBERの値が'10','20'以外(である表AのNAMEを取得)
- ベストアンサー
- Oracle
補足
kztkさん、ありがとうございます。 DBは、MYSQLのver5です。 SEARCHテーブルは結合する必要ないんですね! 勉強になりました。 「MEMBERテーブルのID列」は確かに意味がありません。 お客さんの要望みたいです。