sql查询帮助? sql新手问题

Posted

技术标签:

【中文标题】sql查询帮助? sql新手问题【英文标题】:sql query help? Sql newbie question 【发布时间】:2011-08-26 01:32:29 【问题描述】:

我不断收到“无效使用组功能”的说法

对于这个查询

 mysql_query("UPDATE users SET users.lastmessage = MAX(messages.id) WHERE users.name ='tom'") 
or die(mysql_error());  

我要做的是获取用户表中的 lastmessage 字段并将其更新为消息表中 name = tom 的最大 id

我做错了什么

【问题讨论】:

【参考方案1】:

您不能在 GROUP BY 语句之外使用 MAX 函数。您需要在 UPDATE 查询中执行 SELECT 语句才能正确获取此值。例如:

UPDATE users
SET users.lastmessage = (SELECT MAX(messages.id) AS m_id FROM messages WHERE messages.name = 'Tom')
WHERE users.name = 'Tom'

但是请注意,这有一点限制,因为它只更新 Tom。如果你想更新每个用户,你可以这样做:

UPDATE users
SET users.lastmessage = (SELECT MAX(messages.id) AS m_id FROM messages WHERE messages.name = users.name)

这将使用他们发布的最后一条消息的日期更新每个用户。

【讨论】:

【参考方案2】:

您想执行一个子查询来获取用户“tom”的最大 ID,操作如下:

UPDATE users 
   SET users.lastmessage = (SELECT MAX(id) FROM Messages WHERE messages.name = users.name) 
 WHERE users.Name = 'tom'

编辑:WHERE 子句只为正确的用户执行此操作

【讨论】:

感谢您的非常有帮助的回答【参考方案3】:
UPDATE users, 
 (SELECT MAX(messages.id) as max_message_id FROM messages JOIN users ON (users.user_id = messages.user_id) WHERE users.name LIKE 'Tom') as mm 
 SET users.lastmessage = mm.max_message_id
 WHERE users.name = 'Tom'

我不会说这是解决此问题的最佳方法,但因为我对您的表结构知之甚少,这似乎正在做您想做的事。另请注意,我尚未针对上述内容进行测试,因此您需要使用自己的正确表和字段更改表和字段。

【讨论】:

以上是关于sql查询帮助? sql新手问题的主要内容,如果未能解决你的问题,请参考以下文章

将此 SQL 查询转换为 mongodb 查询 -

运行余额的sql查询

在 SQL 中合并 2 个查询

SQL 伪查询

ORACLE 中的 SQL 查询 - 选择最近的日期

一条sql语句顺序查询出父类的所有子类 如下图:用的是sql Server 2008