0

これは私が書いたクエリです:

SELECT students.name, subjects.sub
FROM students INNER JOIN (subjects INNER JOIN test ON subjects.IDsub = test.IDsub) ON  students.IDstu = test.IDstu
WHERE ((test.date)=#1/21/2013#);

このクエリを実行するたびに、次のメッセージが表示されます。

'#1064 - SQL 構文にエラーがあります。4 行目の 'LIMIT 0, 30' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

これを実行すると、問題は日付形式にあると思います。

SELECT students.name, subjects.sub
FROM students INNER JOIN (subjects INNER JOIN test ON subjects.IDsub = test.IDsub) ON students.IDstu = test.IDstu
WHERE ((test.IDsub)=4);

すべてがうまくいきます!

データベースには、「学生」、「テスト」、「科目」の 3 つのテーブルがあります。

4

3 に答える 3

0

PhpMyAdminは、SQLのスニペットを各コマンドに追加して、返されるレコードの数を制限します。

LIMIT 0, 30

クエリの最後からセミコロンを削除します。そうしないと、SQLはこの余分なスニペットを別のクエリと見なすためです。

WHERE ((test.date)=#1/21/2013#)

また、#そのようなクエリで使用される記号を見たことがないので、問題が発生している可能性があります。

編集:他のすべての人(実際のSQLエラーを無視した...)によると、#は無効です。代わりに引用符を使用してください。

別の編集:実際には、#表記は有効のようです。

日付条件付きのクエリを選択

于 2013-01-16T18:10:13.317 に答える
0

日付は次のようにする必要があります。つまり、#使用する代わりに'

SELECT students.name, subjects.sub
FROM students INNER JOIN 
(subjects INNER JOIN test ON subjects.IDsub = test.IDsub) 
  ON  students.IDstu = test.IDstu
WHERE ((test.date)='1/21/2013');
于 2013-01-16T18:07:00.830 に答える
0

str_to_date

SELECT students.name, subjects.sub
FROM students INNER JOIN (subjects INNER JOIN test ON subjects.IDsub = test.IDsub) ON  students.IDstu = test.IDstu
WHERE ((test.date)=str_to_date('1/21/2013');

もう 1 つの問題は、ポンド記号の使用が#mysql で文字列ルックアップを作成する有効な方法ではないことです。一重引用符を使用したい'

于 2013-01-16T18:08:11.677 に答える