MySQL 更新和案例

标签 mysql sql-update case

MySQL 新手(来自 Oracle),我有这个更新:

UPDATE the_table
SET the_col = 'the_value',
    the_col2 = CASE WHEN the_col = 'the_value' THEN 'x' ELSE 'y' END
WHERE a = 1;

如果 the_col 设置为“the_value”,则将 the_col2 设置为“x”,否则将其设置为“y”。

我看到的是 the_col 更新得很好,但是 the_col2 。

我没有收到错误报告,所以我假设语法/用法没问题。

就好像“SET the_col = 'the_value'”设置了值,以便在 CASE 中引用时它具有新值。我认为这不太可能,但这似乎正在发生。

我想要做的是测试更新前列的值。

最佳答案

当您执行 set the_col2 情况时,我认为 the_col 没有新值...

但有一种方法可以找出答案 - 运行更新两次,先执行 the_col,然后执行 the_col2。比较答案(你必须 - 应该 - 创建一个临时表以确保安全。注意:要创建一个临时测试表(因为你是 MySQL 新手,它可能会有所不同),a) 运行 DESCRIBE your_table; b) 使用其中的值创建表 temp_table; c) 创建一个子查询来读出 your_table 中的所有行并将它们插入到 temp_table 中 - 例如插入到 temp_table 值中(从表中选择 *)。祝你好运。

关于MySQL 更新和案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24457370/

相关文章:

sql - SQlite中带有EXISTS查询的CASE返回错误结果

case - 大写和小写在 Aws dynamoDB 中的 Contains 中不起作用?

sql - 根据另一个表更新行

mysql - 如何处理 MySQL 排名列中的平局

mysql - 在 MySQL 中替代 except

MySQL服务器全局错误日志

python - 大量更新的脚本优化

sql - 在 PostgreSQL 中添加负间隔

MySQL group by desc -如何解释此sql : SELECT ts, avg_time FROM xx WHERE ip ="MAX"GROUP BY id DESC LIMIT 300?

PHP MYSQL 通过 Jquery Ajax : "Notice: Undefined index"