2

テーブルstudent_logがあり、1つのレコードに複数のレコードがあります'rollno'

'sno'Student_logテーブルのauto_incrementインデックスです。

特定の学生の最後の(最新の)エントリ(「rollno」で検索)の特定のフィールドの値を更新したい場合、どうすればよいですか?私の現在のアプローチは機能しません。私はこれをやっています:

update student_log set timein=current_timestamp() where rollno='ST001' and 
sno = (select sno from student_log where rollno='ST001' order by sno desc limit 1);

サブクエリを使用して、学生のrollnoが一致する最新のレコードのsnoを取得しようとしています。そして、私はそれを使用して、snoをupdateステートメントと一致させようとしていますが、これは機能していません。

構文が正しいことは知っていますが、MySQLがサブクエリを使用するための更新を許可していないことを意味していると思います。ありがとう。情報を見逃していないか聞いてください。

4

2 に答える 2

8
UPDATE student_log
SET timein=current_timestamp()
WHERE rollno='ST001'
ORDER BY sno DESC
LIMIT 1

EDIT
は私のクエリをテストしましたが、その可能性はありますか、OPsテーブル構造で何を見逃しましたか

mysql> UPDATE student_log
    -> SET timein=current_timestamp()
    -> WHERE rollno='ST001'
    -> ORDER BY sno DESC
    -> LIMIT 1;
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM student_log;
+-----+--------+---------------------+
| sno | rollno | timein              |
+-----+--------+---------------------+
|   1 | st001  | 0000-00-00 00:00:00 |
|   2 | st002  | 0000-00-00 00:00:00 |
|   3 | st001  | 2012-07-11 12:05:23 |
+-----+--------+---------------------+
3 rows in set (0.00 sec)
于 2012-07-11T09:56:14.427 に答える
2

これを試して::

update 
student_log set timein=current_timestamp() 

where sno in

(

Select sno from 
(
select sno from  student_log where rollno='ST001' order by sno desc limit 1
) tmp
);
于 2012-07-11T09:58:26.087 に答える