SQL子查询WHERE最后一个id

时间:2016-01-04 16:36:08

标签: mysql sql subquery

尝试我的第一个子查询并且似乎无法获得正确的语法,尝试了许多变体,不确定我是否应该使用临时表。我以此为指导:

Source

  

#1064 - 您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以便在#< WHERE log.user_id = 16)AS tempTable'附近使用正确的语法。在第11行

SQL

UPDATE log 
SET log.out_datetime = NOW() 
WHERE log.log_id IN
(
   SELECT log_id FROM
   (
       SELECT log.log_id 
       FROM log 
       ORDER BY log.log_id DESC
       LIMIT 1 
       WHERE log.user_id = 16 //<- line 11
   )
AS tempTable
)

3 个答案:

答案 0 :(得分:0)

尝试以下代码。 WHERE应该在LIMITORDER BY条款 -

之前
UPDATE log 
SET log.out_datetime = NOW() 
WHERE log.log_id IN
(
       SELECT log.log_id 
       FROM log 
       WHERE log.user_id = 16 
       ORDER BY log.log_id DESC
       LIMIT 1
)

答案 1 :(得分:0)

您的陈述无序。此外,您不需要IN,只需使用=

更重要的是,您根本不需要子查询,因为MySQL在ORDER BY个查询中支持LIMITUPDATE

UPDATE log 
    SET log.out_datetime = NOW() 
    WHERE log.user_id = 16 
    ORDER BY log.log_id DESC
    LIMIT 1;

答案 2 :(得分:0)

应该改变如下。

更正SQL语法: SELECT字段名称FROM表名称WHERE字段名称=值ORDER BY字段名称DESC LIMIT结果数

UPDATE log 
SET log.out_datetime = NOW() 
WHERE log.log_id IN
(
   SELECT log_id FROM
   (
       SELECT log.log_id 
       FROM log 
       WHERE log.user_id = 16
       ORDER BY log.log_id DESC
       LIMIT 1
   )
AS tempTable
)