添加SELECT到UPDATE查询?

时间:2016-07-12 15:37:13

标签: sql database

尝试让查询生效。我有一个电子邮件地址作为变量,需要更新此排名中高于匹配记录的所有行。查询:

UPDATE quiz_1_highscore 
    SET rate = rate - 1 
WHERE rate >= ( SELECT rate FROM quiz_1_highscore WHERE email = ? )

然后我从表单提交中绑定电子邮件的参数,但查询不起作用。

我不想对数据库进行两次调用 - 一次调用该电子邮件行中的速率,另一次调用以执行更新。我可以在一个查询中完成所有操作吗?

修改

试图添加Caius评论:

UPDATE quiz_1_highscore AS T1 SET T1.rate = T1.rate - 1 WHERE T1.rate >= ( SELECT MAX(T2.rate) FROM quiz_1_highscore AS T2 WHERE T2.email = ? );

如果我在" mysql workbrench"中运行它,这项工作 - 但是在我的php文件中我得到了错误 -

ErrorSQLSTATE[HY000]: General error: 1093 Table 'T1' is specified twice, both as a target for 'UPDATE' and as a separate source for data

请帮助:\

2 个答案:

答案 0 :(得分:0)

嵌套的SELECT语句是一个表,而不是一个值。使用

( SELECT MAX(rate) FROM quiz_1_highscore WHERE email = ? )

或其他一些聚合函数。

UPDATE quiz_1_highscore AS T1 SET T1.rate = T1.rate - 1 WHERE T1.rate >= ( SELECT MAX(T2.rate) FROM quiz_1_highscore AS T2 WHERE T2.email = ? );

答案 1 :(得分:0)

可能是子查询,您应该限制为添加一行:LIMIT 1