mysql - 如何在 MySQL 中移动整行

标签 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 个实例才能移动一行。我的问题是 - 有没有更简单的方法来做到这一点?

谢谢。

最佳答案

您可以在一次更新中进行多个字段更改,只要您将它们正确地串在一起即可,例如对于包含字段“a”到“e”的简单表:

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)

您必须将所有字段写入更新查询中,但只要您按照正确的顺序进行分配,这在单个语句中绝对是可行的。

关于mysql - 如何在 MySQL 中移动整行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24895580/

相关文章:

MySQL fetch_assoc() 显示少 1 个结果

php - 在mysql上查询数据后制作PHP页面

python - 使用python从windows主机访问虚拟机MySQL数据库

WHERE 子句 MySQL 中的 PHP 字符串变量

php - MySQL:INDEX、UNIQUE、FOREIGN KEY 和 PRIMARY KEY 有什么区别?

php - SQL 遍历表并在不是特定名称时删除

php - wordpress只输出当前日期和数据库中的日期不同

php - 如何在php的编辑表单中填充下拉框

php - 检查用户是否激活他/她的帐户的最有效方法?

mysql - 不支持身份验证方法 'mysql_old_password'