phpmyadmin-swap列

fjaof16o  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(528)

我尝试交换表中的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 . 你知道我的代码有什么问题吗?为了避免误解,我不想移动列。我只想将一些行(如“%210%”这样的代理)从一列交换到另一列。

fzwojiic

fzwojiic1#

在备份后试试这个。。。我尝试了我有两列和工作表

UPDATE idsaccess   SET referer=@tmp:=referer, referer=size_var, size_var = agent, agent = @tmp  WHERE  agent like '%210%';
fzsnzjdm

fzsnzjdm2#

依赖于使用在所使用的同一查询中设置的变量是有风险的。mysql文档特别指出:
一般来说,除了在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;

相关问题