使用MySQL交换同一表中的值

使用MySQL交换同一表中的值,mysql,sql,Mysql,Sql,我有一个非常奇怪的情况。我需要在同一个表中的两行之间交换一个列值,以便使用其中s1和s2是两行 UPDATE table s1, table s2 SET s1.data = s2.data, s2.data = @temp WHERE @temp:=s1.data AND [some expression that works] ORDER BY s2.data ASC LIMIT 1 这会生成一个错误,即不正确使用UPDATE和ORDER BY 我只想从表中找到与原始条目最接近的较小数据

我有一个非常奇怪的情况。我需要在同一个表中的两行之间交换一个列值,以便使用其中s1和s2是两行

UPDATE table s1, table s2 
SET s1.data = s2.data, s2.data = @temp
WHERE @temp:=s1.data AND [some expression that works]
ORDER BY s2.data ASC
LIMIT 1
这会生成一个错误,即不正确使用UPDATE和ORDER BY

我只想从表中找到与原始条目最接近的较小数据条目,并交换这两个值。做

SELECT * FROM table s1, table s2
WHERE [the same expression that works]
ORDER BY s2.data ASC
LIMIT 1

返回包含所需结果的表,但所述更新不起作用。我做错了什么?

显然,我想要的东西不能在一个MySQL查询中完成。最后,我对每一列进行了3次查询、一次选择和两次更新,并在PHP中使用了临时变量。我想,在MySQL中,使用MySQL临时变量进行三次连续查询也可以实现这一点。

我认为,如果您只能使用ORDER BY if,并且只修改ORDER BY中的列所属的表,那么就可以使用ORDER BY if。我知道您实际上只修改了一个表,但MySQL可能不会这样看。还有,为什么要使用LIMIT 1子句?您不是至少修改了2行吗?我只是尝试在第一个order by之后添加s1.order ASC,但没有成功。同样的错误再次出现…非常确定您缺少连接条件,而order by确实不适合此情况。这两个表的主键是什么?正如我所怀疑的,这里不能使用ORDER BY:还可以执行覆盖多个表的更新操作。但是,不能在多表更新中使用ORDER BY或LIMIT。