如何在MySQL中移动整行

时间:2014-07-22 19:00:14

标签: mysql

由于我收集的所有数据,我有一张非常大的桌子。我现在想知道的是,我可以将这些数据放在一个表上,有时候编写一个MySQL查询来更新表会更容易。我遇到的问题是我有这么多列编写MySQL脚本以将每行的内容向右移动是乏味的。现在我正在做

    UPDATE customer.inmates
    SET
    bail = 10_percent
    WHERE LEFT(10_percent, 1) = '$';

然后我再做一次这样做

    UPDATE customer.inmates
    SET
    charge_released = bail
    WHERE LEFT(bail, 1) != '$';

你现在可以看到,如果我的表有50列,我将不得不编写50个这段代码的实例来移动一行。我的问题是 - 有更简单的方法吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以在一次更新中进行多次字段更改,只要您将它们正确地串在一起,例如对于一个带字段的简单表格' a'通过'':

MariaDB [test]> insert into foo values ('a', 'b', 'c', 'd', 'e');
Query OK, 1 row affected (0.00 sec)

MariaDB [test]> select * from foo;
+------+------+------+------+------+
| a    | b    | c    | d    | e    |
+------+------+------+------+------+
| a    | b    | c    | d    | e    |
+------+------+------+------+------+
1 row in set (0.00 sec)

MariaDB [test]> update foo set a=b, b=c, c=d, d=e, e='f';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MariaDB [test]> select * from foo;
+------+------+------+------+------+
| a    | b    | c    | d    | e    |
+------+------+------+------+------+
| b    | c    | d    | e    | f    |
+------+------+------+------+------+
1 row in set (0.00 sec)

单个更新操作也从左到右进行评估,任何读取字段的内容都会在查询中得到更改,获取该字段的原始值:

UPDATE foo SET a = b, b = 'bar', c = b
                   ^---original value of b field, 'b'
                      ^---- b-field gets new value
                                 ^--- c still gets original value of b-field:

MariaDB [test]> select * from foo;
+------+------+------+------+------+
| a    | b    | c    | d    | e    |
+------+------+------+------+------+
| c    | b    | b    | e    | f    |
+------+------+------+------+------+
1 row in set (0.00 sec)

您必须将所有字段都写入更新查询,但只要您按照正确的顺序进行分配,它就可以在一个语句中完成。