尝试我的第一个子查询并且似乎无法获得正确的语法,尝试了许多变体,不确定我是否应该使用临时表。我以此为指导:
#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
)
答案 0 :(得分:0)
尝试以下代码。 WHERE
应该在LIMIT
或ORDER 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
个查询中支持LIMIT
和UPDATE
:
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
)