2

我有一个表student_log,一个表有多个记录'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 与更新语句,这是行不通的。

我知道语法是正确的,但我认为这只是意味着 MySQL 不允许更新使用子查询。谢谢。问我是否遗漏了任何信息。

4

2 回答 2

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

编辑
测试了我的查询,是的,它是可能的,或者我在 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 回答