在mysql的Select If条件中使用Update Query

时间:2014-07-20 18:10:19

标签: 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之间,而不是将列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'

我尝试过这样但是语法错误。

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

谢谢

1 个答案:

答案 0 :(得分:0)

你在找这个吗?

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 演示


更新:

  

...我希望同时选择和更新查询...

不幸的是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 演示