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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

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

SQL Server

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

Visual Studio 2013

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

Q&A

解決済

3回答

6288閲覧

LIMIT句について

newtorino

総合スコア47

C#

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

SQL Server

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

Visual Studio 2013

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

0グッド

0クリップ

投稿2016/04/07 02:28

編集2016/04/07 04:16

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

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

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

投稿2016/04/07 03:26

yuba

総合スコア5568

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

newtorino

2016/04/07 04:19

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

2016/04/07 04:55

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

0

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

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

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

投稿2016/04/07 03:10

aglkjggg

総合スコア769

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

newtorino

2016/04/07 04:25

ご回答ありがとうございます。 大変申し訳無いのですが勘違いしていてMySQLではなかったようです。 失礼しました。 Microsoft SQL Server Express Edition (64-bit) の バージョン10.0.2531.0 みたいです。 エラー全文は以下となります。 型 'System.Data.SqlClient.SqlException' の例外が System.Data.dll で発生しましたが、ユーザー コード内ではハンドルされませんでした 追加情報:'LIMIT' 付近に不適切な構文があります。
aglkjggg

2016/04/07 04:31 編集

SQL Server Management Studioなどを利用し、 SQL Serverに直接SQLを実行しても同じエラーが出力されますでしょうか? エラーが出ない場合はSQLではなく、C#のコード側に問題があると判断できます。
newtorino

2016/04/07 04:53

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

0

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

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

SQL

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

投稿2016/04/07 02:47

ShoheiUyama

総合スコア206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

newtorino

2016/04/07 02:54

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

2016/04/07 04:04

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

2016/04/07 04:46

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問