如何交换表中2条记录的列值?

时间:2011-02-18 20:01:45

标签: sql mysql database

我正在尝试在表中交换2个记录的列值。 我有一个主键:'recnr'

 Recnr   File 
 1     img001.jpg 
 2     img002.jpg 
 5     img005.jpg 
 6     img006.jpg 

我希望文件img005.jpg向上移动一个地方:

 Recnr   File 
 1       img001.jpg
 2       img005.jpg
 5       img002.jpg
 6       img006.jpg

如何做到这一点?

3 个答案:

答案 0 :(得分:2)

您可以添加一个名为weight的整数字段,并将其与ORDER BY子句一起使用。

这将是您的原始数据集:

Recnr | File        | weight
1     | img001.jpg  | 0
2     | img002.jpg  | 0
5     | img005.jpg  | 0
6     | img006.jpg  | 0

为了让一排更高,你可以减轻重量

Recnr | File        | weight
1     | img001.jpg  | 0
2     | img002.jpg  | -10
5     | img005.jpg  | 20
6     | img006.jpg  | 0

然后您选择* ORDER BY weight ASC以使最轻的记录显示在顶部。 结果将是

Recnr | File        | weight
2     | img002.jpg  | -10
1     | img001.jpg  | 0
6     | img006.jpg  | 0
5     | img005.jpg  | 20

答案 1 :(得分:2)

您可以在两个变量中选择两个值,然后更新表:

  • 设置两个变量

    SELECT @two:=File FROM mytable WHERE Recnr=2;
    SELECT @five:=File FROM mytable WHERE Recnr=5;
    
  • 更新表格

    UPDATE mytable SET File=@five WHERE Recnr=2;
    UPDATE mytable SET File=@two  WHERE Recnr=5;
    

答案 2 :(得分:1)

通过调整answer to Swapping column values in MySQL中的方法3,我提出了这个解决方案:

UPDATE your_table t1, your_table t2 SET
t1.File = (@temp:=t1.File),
t1.File = t2.File,
t2.File = @temp
WHERE t1.Recnr = 2 AND t2.Recnr = 5;