0

我有一段让我发疯的 MySQL 代码:

UPDATE Sells SET number = '$number' 
    WHERE id_student = '$id_student' AND id_book = '$id_book' 
    AND Hour = (SELECT MAX(Hour) FROM Sells WHERE id_student = '$id_student')

它不会爆炸,但它也没有做它应该做的事情。如果我取出最后一部分(Hour 子句),它应该可以正常工作,但是当我按照上面的代码添加它时,它什么也不做(好像表中没有 Hours,这是错误的)。小时类型为 INT。

关于如何使最后一个条款起作用的任何想法?不知何故,它一定是写得不好,但我看不出在哪里。

4

2 回答 2

0

您需要id_book在子查询中包含过滤器,因为没有它,MAX(Hour)子查询返回的可能是已在外部查询中过滤的记录:

UPDATE Sells
SET    number = '$number' 
WHERE  id_student = '$id_student'
   AND id_book = '$id_book' 
   AND Hour = (
         SELECT MAX(Hour)
         FROM   Sells
         WHERE  id_student = '$id_student'
            AND id_book = '$id_book'
       )

另请注意,您似乎将数字文字引用为字符串,这会导致不必要的类型转换。

于 2013-07-16T12:31:15.933 回答
0

仅当记录与该学生的图书 ID和最新小时匹配时,它才会更新。如果这些先决条件之一为假,则不会有任何行匹配。

您可能还需要将图书条件添加到子选择中。

于 2013-07-16T12:33:16.657 回答