- ベストアンサー
MySQLで複数のSELECT文を1文にまとめる方法と負荷軽減のためのインデックス作成について
- MySQLで複数のSELECT文を1文にまとめる方法と負荷軽減のためのインデックス作成について解説します。
- 具体的な例を交えながら、IDと教科を指定したときに、名前と順位、およびレコード数を得る方法を紹介します。
- また、サーバーの負荷を減らすためにインデックスの作成についても考察します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (2)
- Python864
- ベストアンサー率13% (4/29)
- Bnbnbnta101
- ベストアンサー率7% (41/516)
関連するQ&A
- mysql where句複数テーブル複数条件摘出
こんにちわ。 mysqlを二日前から勉強し始めた超初心者者です。 まったくの初心者なので質問が的外れかもしれませんがよろしくお願い致します。 以下の三つのテーブルがあります。 t_seito ============================= id name comment created_at 11 赤井 あかい 0000-00-00 00:00:00 22 青葉 あおば 0000-00-00 00:00:00 33 白木 しらき 0000-00-00 00:00:00 ============================= m_kyouka ============== kyouka_id ky_name 1 国語 2 数学 3 理科 4 社会 5 英語 ============== t_score ===================== sc_id seito_id sckyouka_id score 1 11 1 50 2 22 1 80 3 33 1 23 4 11 2 94 5 22 2 43 6 33 2 67 7 11 3 13 8 22 3 76 9 33 3 59 10 11 4 78 11 22 4 40 12 33 4 35 13 11 5 64 14 22 5 87 15 33 5 30 ===================== この三つのテーブルをwhere句で結合させて 社会が50以上で英語が50点以下のデータを全て表示する。 という条件で摘出したいのですが・・・ select * from `m_kyouka`,`t_seito`,`t_score` where `kyouka_id`=`sckyouka_id` and `id`=`seito_id` and `kyouka_id`=4 and `score` >=50 and `kyouka_id`=5 and `score` <=50 と入力したところ ”返り値が空でした (行数 0)。 (Query took 0.0000 seconds.)” と表示されました。 いろいろとネットやら参考書などで調べてはいたのですが、 該当する条件がなかなか見つからず今回はじめて質問をさせていただきました。 何卒ご教授のほどよろしくお願い致します。
- ベストアンサー
- MySQL
- MySQL SELECT結果をSET
質問は二つあります。 (1)二つのコードをひとつにしたいのですが、どうもうまくいきません SELECT id, (price * 10) FROM table WHERE id = 1; SET @sum = @sum + (SELECT ( SELECT id, (price * 10) FROM table WHERE id = 1); (2)コードの簡略化 SELECT id, (price * 10) FROM table WHERE id = 1 OR id = 3 OR id = 8; の、WHERE id = 1 OR id = 3 OR id = 8; の部分です。 よろしくお願いします。
- ベストアンサー
- MySQL
- もうちょっと賢いSELECT文が書けないものでしょうか
初めまして、最近SQLをかじり始めたぺーぺーです。 効率の悪いSELECT文しか書けずに困っています。 下記のテーブルsoftware_tableから、 ・name列「oracle」 ・version値が最大 のレコードに含まれるid(=3)を拾ってきたいのですが、自分の頭では副問い合わせを使う方法か、ソートを使う方法しか思いつきません。 問題は副問い合わせ・ソートを使うと計算コストが大きくなってしまうことで、できることなら副問い合わせ・ソートを使わずに解決したいのですが、何か方法はないものでしょうか? よろしくお願い致します。 ----------------------------- software_table id name version 1 oracle 1 2 oracle 2 3 oracle 3 4 postgres 1 5 postgres 2 6 postgres 3 7 postgres 4 ----------------------------- ■副問い合わせを使った方法 SELECT id FROM software_table WHERE name = 'oracle' AND version = (SELECT max(version) FROM software_table WHERE name = 'oracle'); ■ソートを使った例 SELECT id FROM software_table WHERE name = 'oracle' ORDER BY version DESC LIMIT 1 OFFSET 0; -----------------------------
- ベストアンサー
- PostgreSQL
- select文について
現在、"user"というテーブルに"id"と"date(datetime)"という項目があり、その"date"にあるデータの中から月を指定して抽出したくて以下ようなSQL文を書いたのですがうまくいきません。 SELECT `id` FROM `user` WHERE convert((SELECT extract(month from `date`) FROM `user`), INTEGER) = 9 mysql5.0です。 よろしくお願いします。
- ベストアンサー
- MySQL
- SELECT文の二段重ね
次のSQL文を実行します。 create table1 (id, english) insert table1 (1,"foo") insert table1 (2,"bar") create table2 (id, japanese) insert table2 (1, "ふー") insert table2 (2, "ばー") SQL文法としては誤ってますが、成功したとします。 いま、select id from table1 where english = 'foo'; で1が得られます。 いま、select japanese from table2 where id = 1; で"ふー"が得られます。 これを一つのSQLite3のselect文で実現できないでしょうか。 select japanese from table2 where id = (select id from table1 where english = 'foo'); で良いですか? カテゴリ選択にSQLiteが無いのは、人気が無いからですかね。
- ベストアンサー
- その他(データベース)
- php5+mysqlのSELECT文でwhere句を指定すると正しく動
php5+mysqlのSELECT文でwhere句を指定すると正しく動きません。 レコード数を取得します。 ここで、field10(category)=text型の値に基づきレコード数を取得したいのですが、 $sql="select * from A where B='C'"; とするとレコード出力(index.php)で0を出力。 where句を指定せずに $sql="select * from A"; とするとレコード出力(index.php)で97を出力。 文字コード関係のQ&Aサイトを見ましたが、phpファイルの冒頭部分に $con = mysql_connect($DBSERVER, $DBUSER, $DBPASS); mysql_query("SET NAMES 'sjis'"); $selectdb = mysql_select_db($DBNAME, $con); を指定しています。 テーブルAに含まれるデータは、csv(,区切り)で、load data infile・・・しました。 ※Records:97 Deleted:0 Skipped:0 Warnings:0 他に考えられる原因・対処方法はありますでしょうか? よろしくお願いします。
- 締切済み
- PHP
- MySQLのselect文の設定に関して
MySQLのselect文で、IDを例えば10001~10010までを検索する場合はどうすればいいのか教えて頂けないでしょうか? select * from table_A where ???
- ベストアンサー
- MySQL
- 複数テーブルからselect
sql初心者です。 複数テーブルからselectする書き方が解らず質問です。 ユーザーtable user_code | name | address ------------------------------- 1 | 山田 | 北海道 2 | 高橋 | 東京 3 | 鈴木 | 仙台 4 | 岡田 | 北海道 来店table raiten_code | user_code | raiten_date ------------------------------- 1 | 1 | 2011/05/23 2 | 3 | 2011/08/05 3 | 4 | 2011/08/05 4 | 2 | 2011/08/05 5 | 1 | 2011/10/09 6 | 1 | 2011/08/05 とテーブルがあったとして、 北海道に住むお客様 + 2011/08/05の日付指定で来店記録を拾いだしたいと思っています。 (5日に来店の北海道の方) SELECT * FROM ユーザーtable WHERE address='北海道' union SELECT * FROM 来店table WHERE visit_date ='2011/08/05'; unionにマージとあったので、多分違いそうだなと思いつつ、試してみましたが、うまくいかずにいます。 mysqlのリファレンスマニュアルなども色々見ているのですが、答えにたどり着けません。 なにかヒントのようなものでもかまいませんので、お助けいただけると助かります。
- ベストアンサー
- MySQL
- Select文1 マイナス Select文2
テーブルA ユーザーID,地名,県名,評価 テーブルB ユーザーID,県名,制覇flag のような二つのテーブルがあると仮定してSelect文1、 "select 県名,count(地名) from テーブルA where ユーザーID=1 group by 県名 order by count(地名);" の結果が 県名,count(地名) 北海道,30 東京,22 京都,15 名古屋,10 鳥取,9 沖縄,8 であるとし、 Select文2、 "select 県名 from テーブルB where usrid=1 and 制覇flag='true'" の結果が、 県名 北海道 東京 とします。 このSelect文1の結果から、Select文2の結果を引いて 県名,count(地名) 京都,15 名古屋,10 鳥取,9 沖縄,8 の結果を得るにはどうすればよいでしょうか? Mysqlのバージョンは5.0.21です。
- ベストアンサー
- MySQL
- 別テーブルからSELECTした値を持つ行を削除するSQLは?
削除 SQL がわかりません。 SQL-1 SELECT id FROM table2 WHERE date_in IS NULL; これで取得したidを持つレコード(別テーブル)を削除したいのですが、 どうすれば組み合わさるのでしょうか? DELETE FROM table1 WHERE id=???
- ベストアンサー
- その他(データベース)
- トナー交換を行ったのですがエラーメッセージが表示されるため何度も装着しなおしましたが交換してくださいと表示される。
- Windows10で接続されているHL-L8250CDNプリンターのトナー交換時にエラーメッセージが表示されます。
- HL-L8250CDNプリンターでトナーを交換した際、エラーメッセージが表示され、交換を促されます。
お礼
とても分かりやすいご回答をいただけて大変感謝いたしております。 ありがとうございました。