質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • C#

    7420questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • SQL Server

    603questions

    SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

  • Visual Studio 2013

    308questions

    Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

LIMIT句について

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,348

newtorino

score 39

いつもお世話になっております。

DBのSELECT文で、ImageTableという名前のデータベースの中から
ランダムで一つデータを持ってきたいので
以下のようなSQL文をかきました。
"
SELECT url
FROM ImageTable
ORDER BY RAND()
LIMIT 0,1
"

しかし、
'LIMIT' 付近に不適切な構文があります。
というエラーが発生して表示できないようです。
ランダムで一つのデータを持ってきたい場合どのように書くのが正しいのでしょうか?

よろしくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+4

「付近に不適切な構文があります」というエラーメッセージを出すのはMySQLではなくSQL Serverです。
LIMIT構文はMySQLの独自機能ですので、SQL Serverでは使えません。
SQL Serverでも最近のバージョンでは似たような機能を搭載しているのですが、バージョンはいくつですか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/07 13:19

    ご回答ありがとうございます。

    そうだったんですね・・・。
    勘違いしてたようでMySQLと書いてしまって申し訳ないです。
    Serverのバージョンは、
    SQLServerManegementStudio調べで
    バージョン10.0.2531.0と書いてありました。
    製品はMicrosoft SQL Server Express Edition (64-bit)みたいです。

    キャンセル

  • 2016/04/07 13:55

    SQLServerのほうでやり方を調べてみたら
    "
    SELECT TOP 1 url
    FROM ImageTable
    order by NEWID()
    "
    これで解決可能でした。
    たくさん回答のほういただきましたが、私の勘違いを教えてくれた
    yubaさんをベストアンサーさせていただきたいと思います。
    本当にありがとうございました!

    キャンセル

0

データをランダムでひとつ取得したい場合ですが、質問にあげられているSQLで正常に取得できると思います。
LIMIT付近に全角文字など不正な文字が入っているということはありませんか?

今MySQLに同じ名前のテーブルを作成して試してみましたが、正常に取得できましたよ。

SELECT url FROM ImageTable order by RAND() LIMIT 0, 1

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/07 11:54

    ご回答ありがとうございます。
    Shoheiさんが貼っていただいたもの、そのまま貼っつけてみましたけどダメでした・・・
    やっぱりLIMITのあたりに不適切な構文がありますと言われてしまいます。
    LIMITだけ消すと、正常に表示されるんですが・・・。

    DBの中身が問題なんでしょうかね・・・

    キャンセル

  • 2016/04/07 13:04

    タグにMySQLと有るので、MySQLかと思っていたのですが別のDBでしょうか?
    yubaさんの回答の通りLIMITはMySQL出しか使えないので、SQLServerの場合は、ROW_NUMBERやOffsetなどを使ってそれっぽい実装をする必要が有ります。

    キャンセル

  • 2016/04/07 13:46

    勘違いしていたようで、申し訳ありません。
    ROWや_NUMBERやOffsetを調べて実装に挑戦してみます。
    ありがとうございます!

    キャンセル

0

どのRDBMSをご利用でしょうか?

MySQL 5.6と仮定して実行しましたが特に問題を確認することは出来ませんでした。
http://sqlfiddle.com/#!9/a99f0/4

エラーの全文などがあれば答えやすいです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/07 13:25

    ご回答ありがとうございます。

    大変申し訳無いのですが勘違いしていてMySQLではなかったようです。
    失礼しました。
    Microsoft SQL Server Express Edition (64-bit) の バージョン10.0.2531.0
    みたいです。
    エラー全文は以下となります。
    型 'System.Data.SqlClient.SqlException' の例外が System.Data.dll で発生しましたが、ユーザー コード内ではハンドルされませんでした

    追加情報:'LIMIT' 付近に不適切な構文があります。

    キャンセル

  • 2016/04/07 13:31 編集

    SQL Server Management Studioなどを利用し、
    SQL Serverに直接SQLを実行しても同じエラーが出力されますでしょうか?

    エラーが出ない場合はSQLではなく、C#のコード側に問題があると判断できます。

    キャンセル

  • 2016/04/07 13:53

    自分の使っているSQL ServerではLIMITが対応していなかったようです。
    かわりに、NEWIDというもので実装が可能でした。
    ありがとうございました!

    キャンセル

関連した質問

同じタグがついた質問を見る

  • C#

    7420questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • SQL Server

    603questions

    SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

  • Visual Studio 2013

    308questions

    Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです