• 締切済み

SELECT文の発行でタイムアウトします

以下のようなテーブルがあります。 BooksDataテーブルのBookIDから、 BooksCategoryテーブルのCategoryIDを調べ CategoryNameを表示したいと考えておりますが SELECT文が実行中にタイムアウトになってしまいます。 何か悪いところはございますでしょうか。 [BooksData] BookID ISBN Title [BooksCategory] BookID CategoryID [BooksM_Category] CategoryID CategoryName SELECT BMC.* FROM BooksM_Category AS BMC, BooksCategory AS BC WHERE BookID=XXX AND BMC.CategoryID=BC.CategoryID

  • oen
  • お礼率58% (7/12)

みんなの回答

  • wakap
  • ベストアンサー率14% (13/89)
回答No.1

>BooksDataテーブルのBookIDから、 SQL文の中に BooksDataテーブルがでてきてませんが。。。?

oen
質問者

補足

BooksID=XXXの部分になります。質問の仕方が分りづらく申し訳ありません。 問題はSQLではなくnextしていなかったことなので、締め切ります。ありがとうございました。

関連するQ&A

  • 副問い合わせ?について。

    ASPとAccessを使って書籍検索サイトの作成の勉強をしています。 以下のような複数のテーブルがあります。 BooksDataをPublishTypeで抽出し、更にCategoryIDで抽出した結果のTableAの内容を全て表示するにはどういったSQLを書けばよいのでしょうか。 単純に "SELECT * FROM BooksData WHERE PublishType=3" といった問い合わせは成功しました。 [TableA] BookID ISBN Title PublishType [TableB] BookID(主キー) CategoryID(主キー) [TableC] CategoryID CategoryName

  • 複数テーブルに対するDELETE文が失敗

    BooksDataテーブルのBookID436のレコードについて BooksCategoryとBooksDataテーブルを削除するSQLが失敗します。 どこが悪いのでしょうか。 [BooksCategory] BookID [BooksData] BookID DELETE BC.*,BD.* FROM BooksCategory AS BC, BooksData AS BD WHERE BD.BookID=BC.BookID AND BD.BookID=439;

  • ループがうまくいかない

    以下のようなテーブルがあります。 BookID,CategoryIDは一意な値です。 BooksDataをある条件で抽出するSQLを発行した際、 例えば300番のBookIDにはCategoryIDが複数あると 結果は300のレコードが複数分表示されます。 BooksIDが同じ値の場合、nextして、重複しない値になるまでnextさせ、結果としてBooksIDの値が重複しない結果を表示したいと考えております。 しかし、内側にあるDoWhile-Loop文で不明なエラーとなります。外側のDoWhile-Loop文をコメントアウトされると正常にnextできているようです。原因について推測できることはございますでしょうか。 [BooksData] BookID ISBN Title [BooksCategory] BookID CategoryID [BooksM_Category] CategoryID CategoryName Do While Not rs1.EOF 'BooksDataを表示 Response.Write("BookID:") Response.Write(rs1("BookID")&"<br>") '300番がはいっている bid = rs1("BookID") 'ここでエラーになる Do Until rs1("BookID") > bid rs1.MoveNext '最初のDoWhile-Loopをコメントアウトされると301が表示される。 'Response.Write(rs1("BookID")) Loop Loop

  • SELECT文でタイムアウトが起こります。

    いつも勉強させて頂いております。どうぞよろしくお願いします。 以下の環境で開発を行っています。 SQLServer2005 ASP.NET C# .NETのソースで 1つのクラスに2つのクエリ(2つともSELECT←複数テーブルを結合している)を呼び出す処理を書いています。(トランザクション処理は付けていません)2クエリとも検索対象テーブルは60万件程度のデータを保持しています。検索条件によって処理速度は違うのですが、1ユーザが最も遅い検索条件で検索をしてもタイムアウトにはなりません。しかし、2ユーザが同じタイミングで検索(どのような条件でも)処理を行うと、タイムアウトを起こしてしまいます。まれにデッドロックも起こります。 SQLServerではSelectのたびにlockがかかるのでSQL文中に「WITH(NOLOCK)」を記述するように書かれているサイトを見つけたのですが、他ユーザからの更新もあり得るテーブルなので、他の方法を探しております。 トランザクション分離レベルは規定値です。 是非、どなたかご教授ください。よろしくお願いします。

  • 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が無いのは、人気が無いからですかね。

  • Select文のパフォーマンスについて

    Select文のパフォーマンスについて質問です。 (1)select * from table1 where col1='00001' and kbn in (1,2,3,4) (2)select * from table1 where col1='00001' and (kbn = 1 or kbn = 2 or kbn = 3 or kbn = 4) (1)と(2)ではどちらがパフォーマンスがよいのでしょうか? SQLServer2008

  • oracle7 select文での列別名について

    以下のようなSQLを記載した場合に問題となる可能性はあるでしょうか? 実際にこのようなSQLを書くことはないかもしれませんが、 列別名と、テーブルの項目名を同じにしています。 select XXX as XXX from tblA

  • もうちょっと賢い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; -----------------------------

  • SELECT のWHEREに別のSELECT

    SELECT のWHEREに別のSELECTの結果を当てはめることは可能でしょうか? ただし、引用テーブルは同じテーブルとします。(DDD) 例 SELECT * FROM DDD WHERE B = (SELECT B FROM DDD WHERE C=1) 再起SQLとはまた違うのでしょうか?

  • 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