我尝试在表格中交换3列。我试试这个:
DELIMITER $$
CREATE PROCEDURE px()
BEGIN
DECLARE temp VARCHAR(20);
update `idsaccess` set
temp = referer,
referer = size_var,
size_var = agent,
agent = temp
WHERE agent like '%210%' ;
END $$
CALL p
它不起作用。它给了我那个错误:Unknown column 'temp' in 'field list'
我不明白:temp是varchar值而不是列。我也尝试删除DECLARE和PROCEDURE,然后用@设置变量。像这样:
set @temp = '';
update `idsaccess`
set @temp = referer,
referer = size_var,
size_var = agent
agent = @temp
WHERE agent like '%210%'
它也不起作用。它给了我。 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax
。知道我的代码有什么问题吗?为了避免误解,我不想要移动列。我只想将一些行(WHERE代理,例如'%210%')从一列交换到另一列。
答案 0 :(得分:0)
在备份后尝试这个...我尝试了我有2列的表并且已经工作了
UPDATE idsaccess SET referer=@tmp:=referer, referer=size_var, size_var = agent, agent = @tmp WHERE agent like '%210%';
答案 1 :(得分:0)
依赖于使用与使用相同的查询中设置的变量是有风险的。 MySQL documentation具体说:
作为一般规则,除了在SET语句中,你永远不应该 为用户变量赋值并读取其中的值 言。
最安全的(你应该先备份你的表)这样做的方法是临时更改表:
ALTER TABLE idsaccess ADD COLUMN temp VARCHAR(20);
UPDATE idsaccess SET temp = referer;
UPDATE idsaccess SET referer = size_var, size_var = agent, agent = temp WHERE agent like '%210%';
ALTER TABLE idsaccess DROP COLUMN temp;