mysql - 在 mysql 的 Select If 条件中使用更新查询

标签 mysql sql

是否可以在 if 条件内使用更新查询?目前这是我正在使用的查询

| Time_In               |   Time_Out            |   Val1    |   Val2    |
| 2014-07-19 13:00:01   | 2014-07-19 15:00:00   |   5       |   15      |


SELECT

IF(`Time_In` >= CAST('13:00:01' AS time) AND `Time_Out` <= CAST('15:00:00' AS time),(Val11 * Val2), NULL) 


FROM table WHERE ID = '5'

我希望做的是,当时间在 13:00:01 和 15:00:00 之间时,它不会将列 val1 和 val2 相乘,而只会更新不同的列,例如

SELECT

IF(`Time_In` >= CAST('13:00:01' AS time) AND `Time_Out` <= CAST('15:00:00' AS time),
UPDATE SET TABLE Val3 = 10, NULL) 


FROM table WHERE ID = '5'

我尝试了这样的方法,但出现语法错误。

如何实现这一目标的正确方法和正确语法?

谢谢

最佳答案

你在找这个吗?

UPDATE table1
   SET val3 = CASE WHEN TIME(time_in)  >  '13:00:00' 
                    AND TIME(time_out) <= '15:00:00' THEN 10 ELSE NULL END
 WHERE id = 5

这里是SQLFiddle 演示

<小时/>

更新:

... I was hoping for both select and update query ...

不幸的是MySQL不支持RETURNING子句;因此,不,你不能在同一个查询中同时执行这两项操作。但如果您确实需要这个,您可以使用像这样的存储过程来实现它

DELIMITER //
CREATE PROCEDURE update_select(IN _id INT)
BEGIN
  UPDATE table1
     SET val3 = CASE WHEN TIME(time_in) > '13:00:00' AND TIME(time_out) <= '15:00:00' THEN 10 ELSE NULL END
   WHERE id = _id;
  SELECT val3 FROM table1 WHERE id = _id;
END//
DELIMITER ;

像这样使用它

CALL update_select(5);

这里是SQLFiddle 演示

关于mysql - 在 mysql 的 Select If 条件中使用更新查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24853421/

相关文章:

sql - 在 PL/SQL 中的 View 上触发

SQL Update with Case,分配或什么也不做

python - sql查询中的python列表作为参数

mysql - spring batch - 如何在应用程序运行时传递动态列表到 ListItemReader 将其存储到数据库中

php - 如何为ajax实时搜索结果设置限制?

mysql - 在 MySQL Workbench 中重新定向 FK 连接器

MySQL 使用 LIKE 搜索查询

带有子查询的mysql删除查询不起作用

sql - 在 C 中将字符串作为 SQL 查询执行

MySQL查询以增加日期更新记录